我有一個類MyClass
收集鍵 - 值對,其中關鍵取決於值
class MyClass
{
public string Name { get; set; } // is unique among all instances
public SomeClass Data { get; set; }
...
}
其中我想幾個實例存儲收藏。我經常需要檢查是否存在具有某個名稱的實例,如果存在,請檢索該實例。由於遍歷整個集合不是一個選項(performance!),所以我想到了使用一組鍵值對,例如,一個IDictionary<string, MyClass>
。
我的程序還允許重命名MyClass
的實例(如果名稱唯一性被違反,它將不允許重命名)。但是,如果我重命名MyClass
,我還需要從字典中刪除舊條目並添加新條目(即使用新名稱)以保持數據的一致性。
問題在於,我將有幾個這樣的字典(其中包含所有MyClass
實例的子集),並且在每次重命名後很難跟蹤它們並持續更新所有字典。
有沒有辦法讓鍵值對自動保持一致?我想我聽說過一個允許這樣的數據結構,至少在C++中存在(不幸的是,我不知道它是如何調用的)。基本上,它應該是一個集合,其中鍵不僅僅是一個純字符串,而更像是對字符串的引用(在這種情況下是名稱屬性),但其行爲就像它是一個字符串一樣。 C#中存在這樣的事情嗎?你有其他想法如何保持集合一致嗎?
我唯一的想法是在我的程序的最高級別上擁有所有字典的集合,並使重命名方法在實際重命名過程後更新所有這些字典。但是一定有更好的辦法!
爲什麼這個問題不是Best way to change dictionary key重複:
我已經知道,字典不允許改變的關鍵。相反,我要求另一個數據結構,它在某種程度上與關鍵更改兼容(不會完全喪失性能優勢),而且我也在尋求其他方法。所以我的問題是更加開放的從任何方向的輸入,只要它有助於解決保持數據一致的問題。
使用字典(或任何其他鍵值集合)時,應確保密鑰保持不變。這些集合的速度很快的原因是它們使用散列鍵,因此可以非常快速地找到多個鍵。如果修改散列函數中使用的值,那麼您完全失去了散列函數,因此性能增益 – HimBromBeere
我不認爲問題如上所述是重複的,並且會提示一個答案(其中與重複鏈接指向的答案不兼容) –
再次詢問,我會回答 –