.net 键值对的有序列表?

mbyulnm0  于 2023-03-09  发布在  .NET
关注(0)|答案(5)|浏览(213)

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

更新

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

tez616oj

tez616oj1#

虽然我已经晚了一些,但是.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),而SortedList<TKey, TValue>为O(n)。
  • 如果从排序的数据一次性填充列表,SortedList<TKey, TValue>SortedDictionary<TKey, TValue>快。

SortedDictionary<TKey, TValue>SortedList<TKey, TValue>类之间的另一个区别是,SortedList<TKey, TValue>支持通过Keys和Values属性返回的集合对键和值进行高效的索引检索。访问属性时不必重新生成列表,因为列表只是键和值的内部数组的 Package 。
这两个链接都有类似的注解部分(这是引用的来源)。它们也有关于这两个类的更多信息。如果你有兴趣使用其中的一个,我建议你阅读这两个部分。

nwsw7zdq

nwsw7zdq2#

使用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){
...}
hjqgdpho

hjqgdpho3#

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

如果OrderedDictionary不能满足你的需求仅仅是因为它不是通用的-那么你可以使用the version here that provides a generic equivalent。如果有其他原因不能为你工作,更新你的帖子,我们可以寻找一个更好的选择。
虽然你可以创建自己的List<KeyValuePair<string,string>>,但你将失去按键高效搜索的选项,现在,你当然可以自己实现一个有序的doctionary,将list/dict结合在一起......但是我链接到的帖子已经做到了这一点。

kyks70gy

kyks70gy4#

您可能希望使用Queue<T>来滚动一个,其中T是KeyValuePair<string, string>,这是一个更可靠的契约,显式地保证了插入顺序。
http://msdn.microsoft.com/en-us/library/7977ey2c.aspx

qjp7pelc

qjp7pelc5#

你应该只能够使用List<KeyValuePair<string,string>>。我实际上在MSDN文档中找不到声明插入顺序是有保证的,但这是一个相当安全的赌注...

相关问题