簡體   English   中英

更新一個實例屬性的最有效方法

[英]Most efficient way to update attribute of one instance

我正在創建任意數量的實例(用於循環和范圍)。 在將來的某個事件中,我只需要更改一個實例的屬性。 最好的方法是什么?

現在,我正在執行以下操作:
1)管理列表中的實例。
2)遍歷列表以查找鍵值。
3)一旦我在列表中找到合適的對象(即鍵值=我要尋找的值),請更改我需要更改的任何屬性。

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

感覺確實效率很低:我基本上是遍歷整個實例列表,即使我只需要更改其中一個實例的屬性也是如此。

我是否應該將實例引用存儲在更適合隨機訪問的結構中(例如,將KeyValue作為字典鍵的字典?)在這種情況下,字典是否更有效率? 我應該使用其他東西嗎?

謝謝,
麥克風

至於你提到,你需要保持一個輔助字典與鍵值為重點和實例(或實例的列表為他們的屬性,該屬性值)的值(S) - 的方式更有效。 確實,沒有比字典更有效的了。

我是否應該在更適合隨機訪問的結構中存儲實例引用(例如,將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

這取決於程序的其他需求。 如果您對這些對象所做的全部工作就是使用該特定鍵值訪問一個對象,那么可以肯定,字典是完美的。 但是,如果您需要保留元素的順序,則將它們存儲在字典中將不會這樣做。 (您可以將它們存儲在字典和列表中,或者可能存在一種在隨機訪問和順序保留之間折衷的數據結構)。或者,如果多個對象可以具有相同的鍵值,則不能將它們同時存儲在一個字典中,至少不能直接存儲。 (您可以指定列表或其他內容)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM