Как отсортировать ключи словаря по значению?

Если у меня есть 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);
            }
        }
    }
}
Другие вопросы по тегам