使用 LINQ 将 X、Y 的平面列表转换为 IEnumerable<Point>

问题描述 投票:0回答:1

我有一个简单的字符串列表。这些值是一系列连续的 XY 对。所以

X、Y、X、Y、X、Y

等等..

我想编写一个 LINQ 语句将它们转换为

IEnumerable<Point>
(特别是
System.Windows.Point
),而不创建中间列表。看来我应该能够通过
Skip
Take
、甚至
SelectMany
的某种组合来做到这一点,但我的 LINQ-fu 处于中途,我不知道如何做到这一点。

我能想到的最好的方法是函数枚举器。如果必须的话,我可以忍受这一点。但是有LINQ的方式吗? (至少不会慢很多?)

using System.Windows;
...

private static IEnumerable<System.Windows.Point> EnumeratePoints(IReadOnlyList<string> list)
{
    var numPoints = list.Count / 2;
    if (list.Count % 2 != 0)
        throw new ArgumentException("Invalid # of points");

    for (var i = 0; i < numPoints; ++i)
    {
        var idx = i * 2;
        yield return new Point(double.Parse(list[idx]), double.Parse(list[idx+1]));
    }
}
c# linq
1个回答
0
投票

您可以使用Chunk扩展方法。

var result = list.Chunk(2)
    .Select(p = new Point(double.Parse(p[0]), double.Parse(p[1])))
    .ToList();
© www.soinside.com 2019 - 2024. All rights reserved.