【发布时间】:2014-09-07 20:16:00
【问题描述】:
给定一个大小相等的List<int> 和一个List<Point>
List<int> coords = new List<int> (){23, 137, 76, 151, 61, 203};
List<Point> points = new List<Point>();
我知道我可以用老式的方式做到这一点:
for (int i = 0; i < coords.Count; i += 2) points.Add(new Point(coords[i], coords[i+1]));
..但我想知道是否有一种很好的 LINQ 方法来进行这种转换?
【问题讨论】:
-
可能有一种方法,但我真的不明白为什么它会比 for 循环有所改进......
-
使用标准 LINQ 方法没有简单的方法来做到这一点。您的实现非常干净。看看这个question
-
你觉得这样更干净吗?
var list = coords.Where((x, i) => i % 2 == 0) .Zip(coords.Where((x, i) => i % 2 == 1), (x, y) => new Point(x, y)) .ToList(); -
不是真正的 Linq,但您可以使用
yield关键字来实现。尝试在 linq 中执行此操作会使代码变得更糟。