Я пытаюсь создать список кортежей из списка с помощью LINQ, но не могу решить, как это сделать. У меня есть разные данные во внешнем файле, который я читаю в разделах с использованием стандартного метода в List<Single>
. Затем мне нужно включить это в списки групп последовательных элементов этого списка (которые могут иметь переменное число элементов в группах). Чтобы сформулировать это по-другому:Создать список кортежей из списка с помощью LINQ
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 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
EDIT: Я вообще не беспокоит общее решение, я заинтересован, если это возможно, чтобы сделать этот тип вещи с помощью LINQ. Похоже, что он находится вне оценки того, для чего он предназначен, но мне не хватает чувства, чтобы знать, верно ли это.
Мой вопрос в том, возможно ли выполнить вышеуказанный тип задачи с помощью LINQ. Я набросился в пользовательском интерфейсе и Google, но вышел пустым!
Невозможно на самом деле сделать это в строго типизированной среде, отличной от написания кода для каждого возможного появления 'n'. (Как и многие типы «Tuple»). Вы либо должны использовать динамику, либо рисковать в F #, где это будет арахис. (Но для этого потребуется интерфейс VB с динамикой). –
@GertArnold Я не слишком беспокоюсь об общем решении - я пытаюсь выяснить, можно ли использовать LINQ для выполнения задачи в руке для любого из возможных примеров. Я подозреваю, что смогу сделать решение более общим, как только я знаю, как сделать один пример. Я отредактировал свой вопрос, чтобы сделать это более ясным. Спасибо! – GHC
_ вне оценки того, для чего он предназначен. Правильно. LINQ отлично подходит для операций set (Where, Except, Union, ...), а не для последовательных файлов. Можно написать [методы расширения] (http://stackoverflow.com/a/6852288/861716), которые вырезают IEnumerable в куски определенного количества элементов, но вы можете утверждать, что это все еще LINQ. Обычно классический 'For/ForEach' выглядит гораздо менее сложным. –