C#字典排序
当我在遍历之前尝试对字典进行排序时,它不起作用。我相信这是因为C#中的字典是不可变的?这方面有什么工作吗C#字典排序,c#,sorting,dictionary,C#,Sorting,Dictionary,当我在遍历之前尝试对字典进行排序时,它不起作用。我相信这是因为C#中的字典是不可变的?这方面有什么工作吗 if (arrFilter[i].strTitle.Equals("test")) { arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator()); } else { arrFilter[i].dicValue.OrderBy(j => j.Key, new numComp
if (arrFilter[i].strTitle.Equals("test")) {
arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator());
} else {
arrFilter[i].dicValue.OrderBy(j => j.Key, new numComp());
}
foreach (var item in arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator())) {
// Traversing stuff
}
您使用的
OrderBy
方法是一个LINQ扩展方法,在本例中,它返回一个IEnumerable
。它不会就地对字典进行排序,也不会返回已排序的字典。它只是枚举字典并返回一个排序的可枚举项。这就是为什么在遍历时必须调用它(或者至少在遍历时使用它的返回值)
另请注意,字典是可变的(与您的想法相反)。但是,它的订购不在您的控制之下。如果你想控制排序,你可以考虑使用.< /p> ,你可以简单地将字典转换成列表。实质上:
// var (List<KeyValuePair<string, string>>
var container = myDictionary.ToList();
container.Sort((index, nextIndex) =>
{
return index.Value.CompareTo(nextIndex.Value);
});
//var(列表
var container=myDictionary.ToList();
container.Sort((索引,nextIndex)=>
{
返回index.Value.CompareTo(nextIndex.Value);
});
这将提供字典集合中尚未包含的排序或排序功能。希望这会有所帮助。1.请包含变量声明(例如forarrFilter
和包含strTitle
和dicValue
成员的类型)在您的代码片段中。2.您说“它不工作”的确切含义是什么?要非常迂腐,“返回一个已排序的可枚举项”应该是“返回一个可枚举项,当/如果枚举时最终将返回已排序的项”。当您在获取dictionary.OrderBy(…)的结果之间向dictionary添加项时,它也令人惊讶地没有失败
和实际枚举。。。