Как я могу заказать список словаряна основе значения словаря int? - PullRequest
3 голосов
/ 28 декабря 2011

У меня есть этот список:

List<Dictionary<int, string>> list = new List<Dictionary<int, string>>();

и я хотел бы заказать его (по возрастанию) на основе значения словаря int. Как я могу это сделать?

Пример:

Dictionary<int, string> Min1 = new Dictionary<int, string>();
Dictionary<int, string> Min2 = new Dictionary<int, string>();
Dictionary<int, string> Min3 = new Dictionary<int, string>();
Dictionary<int, string> Min4 = new Dictionary<int, string>();
Dictionary<int, string> Min5 = new Dictionary<int, string>();

Min1.Add(3, "name");
Min2.Add(1, "hello");
Min3.Add(5, "marco");
Min4.Add(4, "is");
Min5.Add(2, "my");

List<Dictionary<int, string>> list = new List<Dictionary<int, string>>();
list.Add(Min1);
list.Add(Min2);
list.Add(Min3);
list.Add(Min4);
list.Add(Min5);

// NOW I NEED TO ORDER list BASED ON DICTIONARY INT VALUE
// SO THE ORDER ON THE LIST SHOULD BE Min2, Min5, Min1, Min4, Min3

Я бы хотел отсортировать список, поэтому, когда я повторяю его и получаю строку, я печатаю «привет, меня зовут Марко»

Ответы [ 4 ]

6 голосов
/ 28 декабря 2011

Если вы хотите сгладить данные и отсортировать их, вы можете попробовать это:

list.SelectMany(x=>x).OrderBy(x=>x.Key)

но если вам не нравятся сглаживание данных и просто сортировка словарей, вы можете сделать:

list.Select(x=>x.OrderBy(y=>y.Key));

Редактировать: Как я понимаю, вам просто нужно использовать один словарь, так что вы можете сделать это:

Dictionary<int,string> dic = new Dictionary<int,string>();
var result = dic.OrderBy(x=>x.Key).ToLookup(x=>x);

Если вы хотите использовать Список вместо словаря (в вашем случае это нехорошо), вы можете сделать это;

 List<KeyValuePair<int,string>> lst1 = new List<KeyValuePair<int,string>>();
 var result = lst1.OrderBy(x=>x.Key).ToLookup(x=>x);
1 голос
/ 28 декабря 2011

Тем не менее, Марко, я воспринял приведенный выше сценарий как вызов и сделал реализацию кода того результата, который вам нужен.Я публикую код ниже.В скорлупе ореха вы должны составить другой список, в котором хранятся отсортированные элементы словаря.Вы можете запустить следующий код в своем отладчике и посмотреть результат самостоятельно.

 public class program
{

    public static void Main()
    {

  SortedDictionary<int, string> Min1 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min2 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min3 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min4 = new SortedDictionary<int, string>();
  SortedDictionary<int, string> Min5 = new SortedDictionary<int, string>();
      Min1.Add(3, "name");
      Min2.Add(1, "hello");
      Min3.Add(5, "marco");
      Min4.Add(4, "is");
      Min5.Add(2, "my");

 List<SortedDictionary<int, string>> list = new List<SortedDictionary<int, string>>();
        list.Add(Min1);
        list.Add(Min2);
        list.Add(Min3);
        list.Add(Min4);
        list.Add(Min5);

        List<SortedDictionary<int, string>> final_list = new List<SortedDictionary<int, string>>();
        List<int> index = new List<int>() ;

        foreach (var element in list)
        {
            foreach (var elements in element)
            {
                index.Add(elements.Key);
                Console.Write(" " +elements.Value+ " ");
            }
        }
        index.Sort();


        foreach (var indexelement in index)
        {
            foreach (var element in list)
            {
                foreach (var elements in element)
                {
                    if (indexelement == elements.Key)
                    {
                        final_list.Add(element);
                    }

                }

            }
        }
        Console.WriteLine();
        foreach (var element in final_list)
        {
            foreach (var elements in element)
            {
                Console.Write(" " + elements.Value+ " ");
            }
        }

        Console.ReadLine();
    }
}

Счастливое кодирование:)

1 голос
/ 28 декабря 2011

Если у вас есть один словарь, вы можете создать упорядоченный список значений на основе ключей в словаре следующим образом, используя LINQ:

var dict = new List<Dictionary<int, string>>();
var list = dict.OrderBy(e => e.Key).ToList();

Без LINQ вы можете использовать SortedList:

SortedList<int, string> sortList = new SortedList<int, string>(dict);

Отсюда, если вы хотите простой List<T>, тогда:

List<string> list = new List<string>(sortList.Values);
1 голос
/ 28 декабря 2011

Вы можете использовать SortedDictionary или SortedList, когда вы определяете Generics.Когда вы делаете это, независимо от того, в какой последовательности вы добавляете элементы в свой словарь, они будут храниться в отсортированном формате, основанном на ключевом элементе (в вашем случае типа int).Кроме того, SortedDictionary использует дерево BinarySearch, что делает его более эффективным по времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...