.net中是否存在允許存儲KeyValuePair<string, string>
保持插入順序的集合?
OrderedDictionary看起來很有前途,但似乎相當缺乏。
現在我正在研究IOrderedEnumerable>,但我似乎無法找到除ISortedDictionary之外的任何實現,但這不是我想要的。不需要進行排序,只是插入順序很重要。排序的Keyvaluepairs列表?
更新
我不喜歡OrderedDictionary的原因是它不是通用的。
.net中是否存在允許存儲KeyValuePair<string, string>
保持插入順序的集合?
OrderedDictionary看起來很有前途,但似乎相當缺乏。
現在我正在研究IOrderedEnumerable>,但我似乎無法找到除ISortedDictionary之外的任何實現,但這不是我想要的。不需要進行排序,只是插入順序很重要。排序的Keyvaluepairs列表?
更新
我不喜歡OrderedDictionary的原因是它不是通用的。
OrderedDictionary
是你想要什麼,如果你既需要項目鍵控和插入測序訪問...它實際上只是一個哈希表和一個列表的組合。它提供了一種通過插入索引或按鍵訪問項目的方法。這是.NET中唯一的一個集合。可悲的是,它不是通用的。
如果OrderedDictionary
僅僅因爲它不是通用的而不能滿足您的需求 - 那麼您可以使用the version here that provides a generic equivalent。如果還有其他原因導致您無法使用,請更新您的帖子,我們可以尋找更好的選擇。
儘管您當然可以創建自己的List<KeyValuePair<string,string>>
,但您將失去使用密鑰有效搜索的選項。現在,你當然可以推出你自己的一個有序的doctionary的實現,它將list/dict結合在一起......但是我已經鏈接到的帖子已經完成了這個。
這很好地總結了我的選擇。因爲無論如何我都不需要重點查找,所以我要和IList一起去。謝謝 – 2010-06-19 20:37:58
只需使用List<KeyValuePair<T,T>>
。它們按插入順序存儲。每次添加它時,都會將最新的一個添加到列表的末尾。
所以
var list = new List<KeyValuePair<String,String>>();
list.Add(new KeyValuePair<String,String>("",""));
如果你想拉出來,以便只需使用:
list.ForEach(x=>...);
或
foreach(var item in list){
...}
List保持秩序是否保證? – 2010-06-19 20:35:12
是的,它必須,因爲你可以直接訪問元素,就像你做一個數組List [0] ..等一樣。 – kemiller2002 2010-06-19 21:21:56
您可能需要使用Queue<T>
其中T推出一個是KeyValuePair<string, string>
。這是一個更堅實的合同,明確保證廣告訂單。
你應該只能夠使用List<KeyValuePair<string,string>>
。我實際上並不能找到MSDN文檔指出的插入順序的保證,但它是一個非常安全的賭注...
儘管我遲到了遊戲,但.NET Framework 4.5爲您提供了新的類。見SortedList<TKey, TValue>
或SortedDictionary<TKey, TValue>
。如果你想知道你應該使用哪一個,MSDN提供了幾個很好的理由,爲什麼你可以選擇一個。
SortedList泛型類是具有O(log n)檢索的鍵/值對的數組,其中n是字典中元素的數量。在這裏,它與SortedDictionary泛型類相似。這兩個類具有相似的對象模型,並且都具有O(log n)檢索。其中兩個類的區別是在插入和移除的存儲器使用和速度:
SortedList<TKey, TValue>
使用較少的內存比SortedDictionary<TKey, TValue>
。SortedDictionary<TKey, TValue>
對於未排序的數據O(log n)有更快的插入和刪除操作,而O(n)對應於SortedList<TKey, TValue>
。- 如果列表從排序數據一次全部填充,則
SortedList<TKey, TValue>
比SortedDictionary<TKey, TValue>
更快。的
SortedDictionary<TKey, TValue>
和SortedList<TKey, TValue>
類之間的另一個區別是SortedList<TKey, TValue>
支持通過由鍵返回的集合的鍵和值的高效的索引檢索和值的屬性。當訪問屬性時不必重新生成列表,因爲列表只是內部鍵和值的數組的封裝器。
兩個鏈接都有類似的備註部分(這是引用來自哪裏)。他們也有兩個班的更多信息。如果你有興趣使用其中的一個,我建議你閱讀這兩部分。
OrderedDictionary不排序值,您可以通過索引訪問元素。缺乏什麼? – 2010-06-18 15:01:48
'OrderedDictionary'是爲你正在尋找的東西而設計的,不幸的是它不是通用的。除此之外,還有其他缺失的東西是你想要的嗎?如果你能澄清你要找的東西(以及爲什麼內置的課程不能滿足你的需求),你會得到更好的答案。 – LBushkin 2010-06-18 15:08:57
如果可能的話,我想避開所有的鑄造。 – 2010-06-19 20:36:15