Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Keyvaluepairs的有序列表?_C#_.net_Collections - Fatal编程技术网

C# Keyvaluepairs的有序列表?

C# Keyvaluepairs的有序列表?,c#,.net,collections,C#,.net,Collections,.net中是否有允许存储KeyValuePair以保持插入顺序的集合? OrderedDictionary看起来很有希望,但似乎相当缺乏。 现在我正在研究IOrderedEnumerable>,但除了isortedictionary之外,我似乎找不到任何实现,但这不是我想要的。不需要进行排序,只需要插入的顺序很重要 更新 我不喜欢OrderedDictionary的原因是它不是通用的。只需使用List。它们按插入顺序存储。每次添加时,最新的一个将添加到列表的末尾 所以 或 您可能希望使用队列滚动

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

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

只需使用
List
。它们按插入顺序存储。每次添加时,最新的一个将添加到列表的末尾

所以


您可能希望使用
队列
滚动一个,其中T是
键值对
。这是一个更可靠的契约,明确地保证了插入顺序


您应该能够使用
列表。实际上,我在MSDN文档中找不到说明插入顺序是有保证的,但这是一个相当安全的赌注…

OrderedDictionary
是您想要的,如果您需要对项目进行键控和插入顺序访问的话。。。它实际上只是一个哈希表和一个列表的组合。它提供了一种通过插入索引或键访问其中项目的方法。它是.NET中唯一一个这样做的集合。遗憾的是,它不是通用的


如果
OrderedDictionary
不能满足您的需求,仅仅因为它不是通用的,那么您可以使用它。如果有其他原因,为什么它不适合你,更新你的帖子,我们可以寻找一个更好的选择


虽然您当然可以创建自己的
列表
,但您将失去按键高效搜索的选项。现在,您当然可以推出自己的有序doctorial实现,它将list/dict组合在一起。。。但是我链接到的帖子已经做到了这一点。

虽然我在游戏中迟到了,.NET Framework 4.5为您提供了新的类。看到或看到。如果您想知道应该使用哪一种,MSDN提供了一些很好的理由,说明为什么您可以选择其中一种

SortedList泛型类是一个具有O(logn)检索的键/值对数组,其中n是字典中的元素数。在这方面,它类似于SortedDictionary泛型类。这两个类具有相似的对象模型,并且都具有O(logn)检索。这两个类的不同之处在于内存使用以及插入和删除的速度:

  • SortedList
    使用的内存少于
    SortedDictionary
  • SortedDictionary
    对于未排序的数据具有更快的插入和删除操作,O(log n)相对于
    SortedList的O(n)
  • 如果从排序数据一次填充列表,
    SortedList
    SortedDictionary
SortedDictionary
SortedList
类之间的另一个区别是
SortedList
支持通过键和值属性返回的集合对键和值进行有效的索引检索。访问属性时不必重新生成列表,因为列表只是键和值的内部数组的包装


这两个链接都有类似的备注部分(这是引文的来源)。他们也有更多关于这两个类的信息。如果您有兴趣使用其中一个,我建议您阅读这两部分。

OrderedDictionary没有对值进行排序,您可以通过索引访问元素。到底缺少什么?
OrderedDictionary
是为您所寻找的内容而设计的,不幸的是它不是通用的。除此之外,你还想找什么别的东西吗?如果你能澄清你在寻找什么(以及为什么内置类不能满足你的需要),你会得到更好的答案。如果可能的话,我想避免所有的强制转换。是否保证列表保持有序?是的,它必须这样做,因为你可以像访问数组列表一样直接访问元素[0]…等。旧帖子但对其他人来说,只要你们不显式排序,列表就会保持顺序。你的删除也会改变索引。虽然从Removed向下移动,这很好地总结了我的选择。因为无论如何我都不需要密钥查找,所以我选择IList。ThanksortedList不维护OP要求的插入顺序(我一直在寻找)。与OrderedList/OrderedDictionary相比,键值对列表是最好的方式。这将按照插入维护索引,并支持泛型类型。
var list = new List<KeyValuePair<String,String>>();

list.Add(new KeyValuePair<String,String>("",""));
list.ForEach(x=>...);
foreach(var item in list){
...}