Как отсортировать ключи словаря по значению?
Если у меня есть Dictionary
и лямбда, которую я могу использовать для упорядочивания значений, как мне получить список или массив ключей, отсортированных по соответствующему значению в словаре?
Например, что, если я хочу отсортировать Dictionary<String,int>
в порядке убывания по значению:
using System.Collections.Generic;
using System;
namespace Program
{
class Program
{
public static void Main()
{
let dict = scope Dictionary<String,int>();
dict.Add("This should be second", 10);
dict.Add("This should be first", 20);
dict.Add("This should be fourth", 2);
dict.Add("This should be third", 7);
function int(int lhs, int rhs) descendingLambda = (lhs, rhs) => rhs <=> lhs;
List<String> listOfKeys;
// sort the keys by value into listOfKeys
for (let s in listOfKeys)
{
Console.WriteLine(s);
}
}
}
}
1 ответ
Решение
Создать List
ключей с помощью List(IEnumerator<T>)
конструктор, затем используйте Sort
, оборачивая упорядочиватель значений в другую лямбду, которая обращается к словарю:
using System.Collections.Generic;
using System;
namespace Program
{
class Program
{
public static void Main()
{
let dict = scope Dictionary<String,int>();
dict.Add("This should be second", 10);
dict.Add("This should be first", 20);
dict.Add("This should be fourth", 2);
dict.Add("This should be third", 7);
function int(int lhs, int rhs) descendingLambda = (lhs, rhs) => rhs <=> lhs;
let listOfKeys = scope List<String>(dict.Keys);
listOfKeys.Sort(scope (lhs, rhs) => descendingLambda(dict[lhs], dict[rhs]));
for (let s in listOfKeys)
{
Console.WriteLine(s);
}
}
}
}