C # итерация ключей в обратном порядке - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть словарь с ключами int. Ключи расположены в случайном порядке и не обязательно являются последовательными (например, 5, 3, 11, 12, 10, 4). Я хотел бы посетить каждую пару ключ-значение в обратном порядке размера ключа. Так что для примера выше я хотел бы посетить (12,11,10 ...).

Способ, которым я вижу, как это сделать, состоит в том, чтобы подсчитать количество элементов, найти ключ max, скажем, бинарный поиск, а затем найти следующее наибольшее значение, которое меньше текущего max и т. Д., Пока обработано количество элементов, содержащихся в словаре.

Однако, возможно, метод уже существует. Для обсуждения того, как найти максимальный ключ: Получить самый большой ключ в словаре

Ответы [ 4 ]

8 голосов
/ 29 ноября 2011
var pairs = dictionary.OrderByDescending(pair => pair.Key);
foreach(var pair in pairs)
{
    var value = pair.Value;
    ...
}
2 голосов
/ 29 ноября 2011
foreach (var p in myDict.OrderByDescending(pair => pair.Key)) {
    // process pair
}
1 голос
/ 29 ноября 2011

Что ж, достаточно просто извлечь все ключи из словаря, затем можно использовать оператор 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);
0 голосов
/ 29 ноября 2011
dic = dic.OrderByDescending(p=>p.Key).ToDictionary(p => p.Key, p => p.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...