C#以相反的顺序迭代键

时间:2011-11-29 18:54:50

标签: c# search dictionary binary key

我有一个包含int个键的词典。密钥是随机顺序的,并不是必然的连续性(例如5,3,11,12,10,4)。我想以密钥大小的相反顺序访问每个键值对。所以对于上面的例子,我想访问(12,11,10 ......)。

我看到如何做到这一点的方法是得到元素数量的计数,通过说二进制搜索找到最大值,然后找到小于当前最大值的下一个最大值等。直到我已经处理了字典中包含的元素数量。

但是,可能存在一种方法。有关如何查找最大密钥的讨论:Get the largest key in a dictionary

4 个答案:

答案 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);