Linq:将IEnumerable <point>转换为IEnumerable <float> </float> </point>

时间:2010-10-29 17:32:34

标签: c# linq

我有 IEnumerable<Point> ,我想将其转换为 IEnumerable<float>

我可以在单个Linq语句中执行此操作吗?

IEnumerable<float> ConvertToPoints(IEnumerable<Point> points)
{
    List<float> floats = new List<float>();
    foreach(var point in points)
    {
        floats.Add(point.X);
        floats.Add(point.Y);
    }
    return floats;
}

2 个答案:

答案 0 :(得分:10)

是的,您可以使用SelectMany

return points.SelectMany(point => new float[] { point.X, point.Y });

另一种不需要LINQ的方法是使用迭代器块:

IEnumerable<float> getPoints(IEnumerable<Point> points)
{
    foreach (Point point in points)
    {
        yield return point.X;
        yield return point.Y;
    }
}

答案 1 :(得分:1)

FWIW,您也可以进行反向转换 - 将浮动列表转换为PointF结构列表(捎带Mark的答案):

IEnumerable<PointF> AsPointF(this IEnumerable<float> ordinates) 
{ 
    float x;
    float y;

    int i = 0;

    foreach (float f in ordinates) 
    {
      switch (i)
      {
        case 0:
          x = f;
          i++;
        break;
        case 1:
          y = f;
          i = 0;
          yield return new PointF(x, y);
        break;
      }
    }
} 

IEnumerable<float> ordinates = GetOrdinatesFromSomewhere();
IEnumerable<PointF> points = ordinates.AsPointF();