当前位置: 首页 > 编程语言 > C#

C#中有非唯一键排序列表泛型集合吗?分享

时间:2023-04-10 19:02:49 C#

C#中有非唯一键排序列表泛型集合吗?我对System.Collections.Generic.SortedList有点惊讶,它要求我使用而不是(comparator),它只允许按值输入这些在我想使用它的方式上看起来很奇怪(尽管我确定它们会起作用对于其他情况)。还有没有这两个特征的另一个集合?SortedList其实是一个key排序的map,不是list。可能是命名错误。但是有一些方法可以模仿您想要的,具体取决于您的具体要求。例如,您可以包装一个SortedList并添加/删除如下内容://addintcount;if(list.TryGetValue(value,outcount))list[value]=count+1;否则列表[值]=1;最终你也可以使用一个简单的列表(List)-这取决于你在做什么。在某种程度上,我希望数据绑定等使实现立即排序的常规列表变得困难——你需要实现很多接口才能让它工作,因为通常它会希望你添加的项目保持不变在最后。我不确定这是否符合您的要求。但是您可以对普通列表进行排序。MSDN对此进行了讨论,但显然这需要调用排序。我试过找到同样的东西:基本上是一个在您添加项目时保持有序的列表。到目前为止我发现的最接近的是Goletas.Collections中的SortedSet,它是使用AVL树实现的:http://www.goletas.com/solutions/collections/但是这个类仍然需要列表中的每个元素是是唯一的(因此是“集合”)。也许可以修改此类以支持非唯一项目。我知道这是一个老问题,但我刚刚遇到另一个问题(C#SortableCollectionAllowingDuplicateKeys),它提供了一个解决方案:使用你自己的IComparer和SortedSet!这是//////用于比较两个键的比较器,将相等性处理为更大///将此比较器与SortedSets、SortedLists或SortedDictionaries一起使用,它们不允许重复键//////publicclassDuplicateKeyComparer:IComparerwhereTKey:IComparable{#regionIComparerMemberspublicintCompare(TKeyx,TKeyy){intresult=x.比较(y);返回结果==0?1:结果;//将相等处理为更大}#endregion}用法:SortedSetmySortedValues=newSortedSet(newDuplicateKeyComparer());编辑:再三考虑,除了SortedSet之外,这可能是一个坏主意,因为除了与foreach循环相关的不同值之外,您可能无法使用任何其他方法来查找和复制键。SortedList会更好地为SortedSet提供服务,其中TKey是感兴趣的值,TValue是该对象重复次数的计数(例如int)。如果不是性能关键,可以使用1)LinqOrderBy()或2)List方法Sort()看这个例子以上是C#学习教程:Isthereanon-uniquekeysortedlistgenericcollectioninC#?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——varlist=newList();列表.添加(2);列表.添加(1);列表。添加(3);Console.WriteLine("使用LinqOrderBy");foreach(intiinlist.OrderBy(i=>i))Console.WriteLine(i);Console.WriteLine("使用List.Sort()");列表.排序();foreach(intiinlist)Console.WriteLine(i);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: