C # — Лямбда / LINQ — преобразование из словаря[] в список

#c# #linq #list #dictionary #lambda

#c# #linq #Список #словарь #лямбда

Вопрос:

Короче говоря, чего я пытаюсь добиться, так это преобразовать Dictionary<string, string>[] в List<string[]> . Я не против потерять ключевую информацию словарей.

Решение, которое я придумал, работает, но я почти уверен, что есть более удобный способ добиться того же результата с помощью LINQ и лямбда-выражений.

Я особенно ненавижу ту часть, где мне нужно использовать дополнительную переменную для подсчета, но, насколько я знаю, невозможно выполнить цикл через Dictionary<string, string> с for циклом

Заранее спасибо.

  Dictionary<string, string>[] arrayOfStringDictionaries = new Dictionary<string, string>[2]
        {
            new Dictionary<string, string>(),
            new Dictionary<string, string>()
        };

        arrayOfStringDictionaries[0].Add("1", "Test1");
        arrayOfStringDictionaries[0].Add("2", "Test2");
        arrayOfStringDictionaries[0].Add("3", "Test3");

        arrayOfStringDictionaries[1].Add("1", "Test4");
        arrayOfStringDictionaries[1].Add("2", "Test5");
        arrayOfStringDictionaries[1].Add("3", "Test6");

        List<string[]> listofStringArrays = new List<string[]>();

        foreach (Dictionary<string, string> singledic in arrayOfStringDictionaries)
        {
            int count = 0;
            string[] stringArray = new string[singledic.Keys.Count];
            foreach (var key in singledic.Keys)
            {
                stringArray[count] = singledic[key];
                count  ;
            }

            listofStringArrays.Add(stringArray);
        }
  

Ответ №1:

Итак, все, что вам нужно, это значения?

 arrayOfStringDictionaries.Select(dict => dict.Values.ToArray()).ToList();
  

Что это в основном означает:

  • Для каждого словаря в массиве получите все его значения и создайте из них массив

  • Получите все эти массивы и поместите их в список