Создать список кортежей из списка с помощью LINQ

Я пытаюсь создать список кортежей из списка, используя LINQ, но не могу понять, как это сделать. У меня есть различные данные во внешнем файле, которые я читаю, используя стандартные методы в List<Single>Затем мне нужно превратить это в списки групп последовательных элементов этого списка (которые могут иметь переменное количество элементов в группах). Чтобы сформулировать это по-другому:

List<Single> with n elements goes to List<Tuple<Single, Single>> with (n/2) elements

или же

List<Single> with n elements goes to List<Tuple<Single, Single, Single>> with (n/3) elements

Я не мог понять, как это сделать с помощью LINQ, поэтому я вернулся к циклу for, например, так:

For i As Integer = 0 To CType(coords.Item2.Count / 3, Integer) Step 3
    normalList.Add( _
        New Tuple(Of Single, Single, Single)( _
            coords.Item2.Item(i), _
            coords.Item2.Item(i + 1), _
            coords.Item2.Item(i + 2) _
        ) _
    )
Next i

РЕДАКТИРОВАТЬ: Меня совсем не волнует универсальное решение, меня интересует, можно ли делать подобные вещи с помощью LINQ. Кажется, что это за пределами оценки того, для чего он предназначен, но мне не хватает чувства, чтобы знать, правда ли это.

Мой вопрос заключается в том, возможно ли выполнить вышеуказанный тип задачи с помощью LINQ. Я бился в пользовательском интерфейсе и Google, но пришел пустым!

2 ответа

Решение

Это может быть достигнуто (пример для Tuple<Single, Single>) и следующее решение не очень сложно, но использование цикла является более понятным и - в случае данного конкретного решения - более эффективным (список ввода перечисляется дважды). Код в C#, не знаю VB

var even = inputList.Where((elem, ind) => ind % 2 == 0);
var odd = inputList.Where((elem, ind) => ind % 2 == 1);
var outputList = even.Zip(odd, (a, b) => new Tuple<Single, Single>(a, b)).ToList();

Может быть, это кому-то поможет.

var pairs = from p in TheListOfAllLists select (
new Tuple<string, string>( p.ParameterName,p.Value.ToString()));
Другие вопросы по тегам