LINQ - превратить List<string> в словарь<string, string>

Я просто работаю над ката на моем ланче, и я отклеился...

Вот шаги, которые я пытаюсь выполнить:

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

В последнем утверждении я имею в виду следующую коллекцию из 4 строк:

{
    "string1",
    "string2",
    "string3",
    "string4"
}

Я должен закончить с этой коллекцией пар (правильный ли термин "кортежи"?):

{
    { "string1","string2" },
    { "string3","string4" }
}

Я начал смотреть на ToDictionary, затем перешел к выбору анонимного типа, но я не уверен, как сказать "вернуть следующие две строки в паре".

Мой код выглядит примерно так на момент написания:

public void myMethod() {

    var splitInputString = input.Split('\n');

    var dic = splitInputString.Skip(1).Select( /* each two elements */ );
}

Приветствия за помощь!

Джеймс

1 ответ

Решение

Ну, вы можете использовать (не проверено):

var dic = splitInputStream.Zip(splitInputStream.Skip(1),
                               (key, value) => new { key, value })
                          .Where((pair, index) => index % 2 == 0)
                          .ToDictionary(pair => pair.key, pair => pair.value);

Zip часть получится с:

{ "string1", "string2" }
{ "string2", "string3" }
{ "string3", "string4" }

... и Where пара, использующая индекс, пропустит все остальные записи (это будет "значение со следующим ключом").

Конечно, если вы действительно знаете, у вас есть List<string> Начнем с того, что вы можете просто получить доступ к парам по индексу, но это скучно...

Другие вопросы по тегам