我正在使用ResourceDictionary,但我希望能夠查找與其他項目的值或密鑰。每個都是獨一無二的,所以這不是問題。有沒有這種雙面查找功能的類型?什麼可以用作雙面資源字典?
6
A
回答
7
沒有內置,但這很容易編寫。我可能會爲此實現IDictionary ...然後,您會將ResourceDictionary轉儲到您的自定義類型中。
public class DoubleLookup<TKey, TValue>
{
private IDictionary<TKey, TValue> keys;
private IDictionary<TValue, TKey> values;
//stuff...
public void Add(TKey key, TValue value)
{
this.keys.Add(key, value);
this.values.Add(value, key);
}
public TKey GetKeyFromValue(TValue value)
{
return this.values[value];
}
public TValue GetValueFromKey(TKey key)
{
return this.keys[key];
}
}
2
反轉字典中的鍵/值關係時要非常小心。
字典的合同保證,爲集合中的每一個值,恰好有它映射到該值一個關鍵。鑰匙是獨一無二的。但事實並非如此。對於每個不同的值,可以有許多不同的鍵映射到該值。
在我個人的代碼庫(用Java編寫的,這是足夠接近),我有多重映射類只是這種事情。雖然密鑰是唯一的,但每個密鑰都可以與多個值關聯。它與Map>完全相同。
當我需要一個集合中執行價值與鍵查找,我做這樣的事情:
Map<K, V> lookupTable = ...;
MultiMap<V, K> reverseLookupTable = MapUtil.invert(lookupTable);
V value = ...;
if (reverseLookupTable.containsKey(value)) {
Set<K> keys = reverseLookupTable.get(value);
}
如果使用除多重映射爲您的反向東西(比如一個HashMap或詞典)查找表中,除非可以保證集合中的所有鍵和所有值都是唯一的,否則會冒失去一些V-> K映射的風險。
編輯:
哎呀。我只注意到你說你的集合中的所有鍵和值都是唯一的。但是,無論如何,我會在這裏留下我的答案,作爲對其他讀者的警告,可能無法提供相同的保證。
相關問題
- 1. 合併資源字典可以從App.xaml訪問資源嗎?
- 2. 資源字典
- 3. 爲什麼Eclipse可以不寫資源
- 4. 與資源字典
- 5. 多資源字典
- 6. 我可以在單個頁面的資源中合併資源XAML詞典嗎?
- 7. 什麼是引用資源字典的正確方法?
- 8. 桌面雙啓動:資源可用性完全可用
- 9. WPF:靜態資源vs資源字典?
- 10. WPF資源:資源字典與xmlDataProvider
- 11. 獲得來自各種資源字典資源字典資源一鍵
- 12. 資源字典作爲鏈接文件
- 13. 有什麼方法可以在資源字典中重複使用相同的自定義字體嗎?
- 14. 字典資源和綁定
- 15. 在資源字典文件
- 16. 不能爲資源字典
- 17. 資源字典空筆刷
- 18. WPF資源字典和DynamicResource
- 19. 嵌套資源字典
- 20. WPF資源字典XSLT
- 21. Silverlight中的資源字典
- 22. 參數和資源字典
- 23. MahApps資源字典錯誤
- 24. 合併資源字典
- 25. 爲什麼下面打印出「資源暫時不可用」?
- 26. 爲什麼CSS資源在spring jsp頁面中不起作用?
- 27. 我可以使用什麼資源來驗證DTD?
- 28. 可以使用什麼URI來請求默認資源?
- 29. 可以使用什麼元資源類型?
- 30. WPF資源字典在應用程序資源