我有一个包含int
个键的词典。密钥是随机顺序的,并不是必然的连续性(例如5,3,11,12,10,4)。我想以密钥大小的相反顺序访问每个键值对。所以对于上面的例子,我想访问(12,11,10 ......)。
我看到如何做到这一点的方法是得到元素数量的计数,通过说二进制搜索找到最大值,然后找到小于当前最大值的下一个最大值等。直到我已经处理了字典中包含的元素数量。
但是,可能存在一种方法。有关如何查找最大密钥的讨论:Get the largest key in a dictionary
答案 0 :(得分:8)
var pairs = dictionary.OrderByDescending(pair => pair.Key);
foreach(var pair in pairs)
{
var value = pair.Value;
...
}
答案 1 :(得分:2)
foreach (var p in myDict.OrderByDescending(pair => pair.Key)) {
// process pair
}
答案 2 :(得分:1)
嗯,从字典中检索所有键很容易,然后可以使用LINQ OrderByDescending()运算符以相反的顺序获取它们:
foreach( var key in yourDictionary.Keys.OrderByDescending(x => x) )
{
// your logic here
}
如果您需要与该键相关联的值,您还可以执行以下操作:
foreach( var keyValuePair in yourDictionary.OrderByDescending(kvp => kvp.Key) )
{
// your logic here
}
当然,您也可以使用查询理解语法LINQ:
var yourResult = from kvp in dictionary
order by kvp.Key descending
select YourProjectionFunction(kvp);
答案 3 :(得分:0)
dic = dic.OrderByDescending(p=>p.Key).ToDictionary(p => p.Key, p => p.Value);