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>
Начнем с того, что вы можете просто получить доступ к парам по индексу, но это скучно...