如何从3个双打的列表中获取浮点数组?

时间:2014-07-07 12:32:21

标签: c# linq

拥有一个包含3个双值x,y,z的类

 public struct Point : IEquatable<Point>, IComparable<Point>
 {
        public double _X;
        public double _Y;
        public double _Z;
        public double X { get { return _X; } set { _X = value; } }
        public double Y { get { return _Y; } set { _Y = value; } }
        public double Z { get { return _Z; } set { _Z= value; } }
        public Point(double x, double y)
        {
            _X = x;
            _Y = y;
            _Z = 0;
        }
        public Point(double x, double y, double z)
        {
            _X = x;
            _Y = y;
            _Z = z;
        }
}

在循环中我填写了像

这样的点列表
   AllDataPoints = new Point[100];
   double x,y,z;
   for (int i = 0; i < SOMESOURCE.values; i++)
   {
        x = SOMESOURCE.X;
        y = SOMESOURCE.Y;
        z = SOMESOURCE.value;
        AllDataPoints[i] = new Point(x, y, z);
    }

然后我想在一个浮点数组中放入所有z值。

如何使用LINQ完成此操作?

2 个答案:

答案 0 :(得分:3)

如果你想要LINQ的浮点结果:

float [] arrayResult = AllDataPoints.Select(e => (float) e.Z).ToArray() ; 

或者如果你想留下双倍值:

double [] arrayResult = AllDataPoints.Select(e => e.Z).ToArray() ; 

答案 1 :(得分:3)

  

在循环内我填写一个点列表

你可以在没有循环的情况下完成,如下所示:

arrayResult = SOMESOURCE
    .Select(item => new Point(item.X, item.Y, item.value))
    .ToArray();
  

我想在一个浮点数组中放入所有z值。

LINQ&#39; Select允许您这样做:

var allZs = arrayResult.Select(pt => (float)pt.Z).ToArray();