Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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#字典排序_C#_Sorting_Dictionary - Fatal编程技术网

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

当我在遍历之前尝试对字典进行排序时,它不起作用。我相信这是因为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());
}

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.请包含变量声明(例如for
arrFilter
和包含
strTitle
dicValue
成员的类型)在您的代码片段中。2.您说“它不工作”的确切含义是什么?要非常迂腐,“返回一个已排序的可枚举项”应该是“返回一个可枚举项,当/如果枚举时最终将返回已排序的项”。当您在获取
dictionary.OrderBy(…)的结果之间向dictionary添加项时,它也令人惊讶地没有失败
和实际枚举。。。