C#学习教程:如何按值对字典条目列表进行排序(自定义排序)示例:myHashtable[keys,Values[]]myHashtable.Add[1,Value1];myHashtable.Add[2,Value2];myHashtable.Add[3,Value3];myHashtable.Add[4,Value4];myHashtable.Add[5,Value5];哪里有Value1;Value2、value3、value4和value5如下所示。Value1[name="Smith"]Value1[Title="Mr"]Value1[Salary=1000]Value1[Identity="S"]Value2[name="Peter"]Value2[Title="Mr"]Value2[Salary=1000]Value2[Identity="A"]Value3[name="Tom"]Value3[Title="Mr"]Value3[Salary=1000]Value3[Identity="C"]Value4[name="Marry"]Value4[Title=“Ms”]Value4[Salary=1000]Value4[Identity=“”]Value5[name=“Sam”]Value5[Title=“Mr”]Value5[Salary=1000]Value5[Identity=“C”]I想要对这个字典列表值进行排序,其中“C”的值首先是“A”,然后是“S”,然后是“”,排序后的结果应该是这样的。myHashtable.Add[3,Value3];//Value3.Identity="C"myHashtable.Add[5,Value5];//Value5.Identity="C"myHashtable.Add[2,Value2];//Value2.Identity="A"myHashtable.Add[1,Value1];//Value1.Identity="S"myHashtable.Add[4,Value4];//Value4.Identity=""这是我的尝试。varresult1=newList(hashtable.Count);varresult2=newList(hashtable.Count);varresult3=newList(hashtable.Count);varresult4=newList(hashtable.Count);varresult=newList(hashtable.Count);foreach(哈希表中的DictionaryEntry条目){result.Add(entry);}foreach(DictionaryEntrydictionaryEntryinresult){vart2=dictionaryEntry.Value;开关(t2.Identity){案例“C”:result1。添加(字典条目);休息;案例“A”:result2.Add(dictionaryEntry);休息;案例“S”:result3.Add(dictionaryEntry);休息;case"":result4.Add(dictionaryEntry);休息;}}result1.ToList();结果2.ToList();结果3.ToList();varcombinedResult=result1.Union(result2).Union(result3).Union(result4).ToDictionary(k=>k.Key,v=>v.Value).OrderByDescending(v=>v.Value);如何对combinedResult进行排序以提供上面字典条目的自定义排序列表?任何帮助是极大的赞赏。感谢在使用哈希表实现字典数据结构时,为了实现分摊的O(1)插入/删除/更新操作,数据未排序。另一方面,当使用平衡树实现Dictionary时,操作O(logn)稍微慢一些,但它们可以按排序方式(按键)枚举。比如C#字典实现的是unsorted,C++maps是排序的(基于红黑树)鉴于以上(不能对字典中的数据进行排序),你可以将字典保存为lists/arrays,然后按照你的comparator想要排序。下面是一个字典和自定义比较器的例子,你可以在自定义比较器中获取字典中逻辑排序的值:publicclassData{publicstringName{get;放;}publicstringIdentity{get;放;}}publicclassCustomerComparer:IComparer>{privateListorderedLetters=newList(){"C","A","S"};publicintCompare(KeyValuePairstr1,KeyValuePairstr2){返回orderedLetters.IndexOf(str1.Value.Identity)-orderedLetters.IndexOf(str2.Value.Identity);}}classProgram{staticvoidMain(string[]args){Datavalue1=newData{Name="Name1",Identity="S"};Datavalue2=newData{Name="Name2",Identity="A"};Datavalue3=newData{Name="Name3",Identity="C"};Datavalue4=newData{Name="Name4",Identity="C"};字典unsortedDictionary=newDictionary();unsortedDictionary.Add(1,value1);unsortedDictionary.Add(2,value2);unsortedDictionary.Add(3,value3);unsortedDictionary.Add(4,value4);varcustomSortedValues=unsortedDictionary.Values.OrderBy(item=>item,新的CustomerComparer()).ToArray();for(inti=0;i您也可以使用SortedDictionary(如@Clockwork-Muse建议的那样)并像上面的示例一样传递CustomComparer如果您需要保持快速操作并且只需要值,这真的取决于您为报告排序,然后在需要值时排序(如我的示例)。如果您将大量访问排序后的值,那么首先对它们进行排序。上面是C#学习教程全文内容:如何对字典条目列表进行按值排序(自定义排序),如果对大家有用,需要进一步了解C#学习教程,希望大家关注——本文收集自互联网,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:
