我想根据其值对字典进行排序并获取结果字典
Dictionary<String, Int32> outputDictionary = new Dictionary<String, Int32>();
outputDictionary.Add("MyFirstValue", 1);
outputDictionary.Add("MySecondValue",2);
outputDictionary.Add("MyThirdValue", 10);
outputDictionary.Add("MyFourthValue", 20);
outputDictionary.Add("MyFifthValue", 5);
Run Code Online (Sandbox Code Playgroud)
我用3种方法按值排序
方法1:
outputDictionary = outputDictionary.OrderBy(key => key.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)
方法2:
foreach (KeyValuePair<String, String> item in outputDictionary.OrderBy(key => key.Value))
{
// do something with item.Key and item.Value
}
Run Code Online (Sandbox Code Playgroud)
方法3:
outputDictionary = (from entry in outputDictionary orderby entry.Value ascending select entry).ToDictionary(pair => pair.Key, pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)
但无论我选择何种方法,我都会得到结果
MyFirstValue, 1
MyThirdValue, 10
MySecondValue, 2
MyFourthValue, 20
MyFifthValue, 5
Run Code Online (Sandbox Code Playgroud)
我想要的地方
MyFirstValue, 1
MySecondValue, 2
MyFifthValue, 5
MyThirdValue, 10
MyFourthValue, 20
Run Code Online (Sandbox Code Playgroud)
Ren*_*nan 10
根据定义,字典不可排序.从抽象的意义上讲,对于检索订单元素没有任何保证.有些代码可以按顺序获取项目 - 我在Linq中不是那么流利,但我认为你的代码可以做到这一点 - 但是如果你要大量使用这些数据,那么效率低于已经排序结构可用于迭代.我建议使用其他类型或类型集,例如a List<KeyValuePair<string, string>>.
你也可以创建KeyValuePair一个整数的元素(即:)KeyValuePair<string, int>,因为这是你想要排序的.字符串比较是按字母顺序排列的.按字母顺序排列,20确实在5之前.
编辑: Magnus在评论中提出了SortedDictionary类.
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |