1

任意の数のインスタンスを作成しています (for ループと範囲を使用)。将来のあるイベントで、インスタンスの 1 つのみの属性を変更する必要があります。これを行う最善の方法は何ですか?

現在、私は次のことを行っています:
1) リスト内のインスタンスを管理します。
2) リストを反復処理して、キー値を見つけます。
3) リスト内で適切なオブジェクトを見つけたら (つまり、キー値 = 探している値)、変更が必要な属性を変更します。

for Instance within ListofInstances:
    if Instance.KeyValue == SearchValue:
        Instance.AttributeToChange = 10

これは非常に効率が悪いように感じます。インスタンスの 1 つの属性を変更するだけでよいにもかかわらず、基本的にインスタンスのリスト全体を反復処理しています。

よりランダム アクセスに適した構造 (たとえば、辞書キーとして KeyValue を持つ辞書) にインスタンス参照を格納する必要がありますか?) この場合、辞書はより効率的ですか? 他のものを使用する必要がありますか?

ありがとう、
マイク

4

3 に答える 3

1

それは、プログラムの他のニーズが何であるかによって異なります。これらのオブジェクトを使ってその特定のキー値を持つオブジェクトにアクセスするだけなら、確かに辞書は完璧です。ただし、要素の順序を保持する必要がある場合、それらを辞書に格納してもそれはできません。(それらを dict とリストの両方に格納することも、ランダム アクセスと順序保存の間で妥協を提供するデータ構造が存在する可能性もあります) または、複数のオブジェクトが同じキー値を持つことができる場合、次のことはできません。少なくとも直接ではなく、両方を同時に単一の辞書に保存します。(あなたはリストか何かの口述を持つことができます)

于 2010-05-24T04:45:02.787 に答える
1

あなたが言及したように、キー値をキーとして、インスタンス(または属性のその値を持つインスタンスのリスト)を値として補助辞書を保持する必要があります-より効率的です実際、そのような用途で辞書ほど効率的なものはありません。

于 2010-05-24T04:32:35.630 に答える
1

ランダムアクセスにより適した構造にインスタンス参照を格納する必要があります (たとえば、辞書キーとして KeyValue を持つ辞書ですか?)

はい、キーから値にマッピングしている場合(この場合はそうです)、通常、キーを介して要素にアクセスする場合は、リストよりも辞書の方が適しています

この場合、辞書はより効率的ですか?

はい、はるかに効率的です。ディクショナリはキーでアイテムを検索するのに平均で O(1) かかりますが、リストはキーでアイテムを検索するのに O(n) かかります。これが現在行っていることです。

辞書の使用

 # Construct the dictionary
 d = {}

 # Insert items into the dictionary
 d[key1] = value1
 d[key2] = value2
 # ...

 # Checking if an item exists
 if key in d:
      # Do something requiring d[key]
      # such as updating an attribute:
      d[key].attr = val
于 2010-05-24T04:33:06.737 に答える