我有 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;
}
答案 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();