有序的Keyvaluepairs列表?

Bor*_*ens 7 .net c# collections

.net中是否有一个集合允许存储KeyValuePair<string, string>保持插入顺序?
OrderedDictionary看起来很有前景,但似乎相当缺乏.
现在我正在研究IOrderedEnumerable>,但我似乎找不到除了ISortedDictionary之外的任何实现,但这不是我想要的.不需要进行排序,只需插入顺序很重要.

更新
我不喜欢OrderedDictionary的原因是它不是通用的.

LBu*_*kin 9

OrderedDictionary如果您需要键入和插入顺序访问项目,那么您就想要它...它实际上只是哈希表和列表的组合.它提供了一种通过插入索引或按键访问其中项目的方法.它是.NET中唯一一个这样做的集合.可悲的是,它不是通用的.

如果OrderedDictionary不能完全满足您的需求,因为它不是通用的 - 那么您可以使用此处提供通用等效项的版本.如果还有其他原因导致它不适合您,请更新您的帖子,我们可以寻找更好的选择.

虽然你当然可以创建自己的,但List<KeyValuePair<string,string>>你将无法有效地按键搜索.现在,您当然可以推出自己的有序doctionary的实现,将list/dict组合在一起......但我链接到的帖子已经这样做了.


tec*_*ice 8

虽然我迟到了,但.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>支持通过Keys和Values属性返回的集合对键和值进行有效的索引检索.访问属性时没有必要重新生成列表,因为列表只是内部键和值数组的包装器.

两个链接都有类似的备注部分(引用来自的地方).他们还为这两个班级提供了更多信息.如果您有兴趣使用其中一个,我建议您阅读这两个部分.


kem*_*002 7

只是用List<KeyValuePair<T,T>>.它们按插入顺序存储.每次添加时,最新的一个都会添加到列表的末尾.

所以

var list = new List<KeyValuePair<String,String>>();

list.Add(new KeyValuePair<String,String>("",""));
Run Code Online (Sandbox Code Playgroud)

如果你想将它们拉出来,只需使用:

list.ForEach(x=>...);
Run Code Online (Sandbox Code Playgroud)

要么

foreach(var item in list){
...}
Run Code Online (Sandbox Code Playgroud)