使用LINQ从List创建元组列表

时间:2013-06-03 08:10:52

标签: .net linq list tuples enumerable

我正在尝试使用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完成上述类型的任务。我已经在用户界面和谷歌中苦苦挣扎但是空洞了!

2 个答案:

答案 0 :(得分:5)

也许这会对某人有所帮助。

var pairs = from p in TheListOfAllLists select (
new Tuple<string, string>( p.ParameterName,p.Value.ToString()));

答案 1 :(得分:4)

可以实现(例如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();