我有一个“双精度”值的列表。我需要选择每6个记录。这是一个坐标列表,我需要得到每6个值的最小值和最大值。
坐标列表(示例):具有数百个坐标的[2.1, 4.3, 1.0, 7.1, 10.6, 39.23, 0.5, ... ]
。
结果应该看起来像:恰好有6个坐标的[x_min, y_min, z_min, x_max, y_max, z_max]
。
下面的代码可以工作,但需要很长时间才能遍历所有坐标。我想使用Linq (也许更快?)
for (int i = 0; i < 6; i++)
{
List<double> coordinateRange = new List<double>();
for (int j = i; j < allCoordinates.Count(); j = j + 6)
coordinateRange.Add(allCoordinates[j]);
if (i < 3) boundingBox.Add(coordinateRange.Min());
else boundingBox.Add(coordinateRange.Max());
}
有什么建议吗?非常感谢!欢迎光临!
发布于 2010-03-16 19:52:34
coordinateRange.Where( ( coordinate, index ) => (index + 1) % 6 == 0 );
Webleeuw的答案发布在这个之前,但我认为使用索引作为参数比使用IndexOf
方法更清楚。
发布于 2010-03-16 19:51:13
Where方法有一个重载,可以让您直接使用索引:
coordinateRange.Where((c,i) => (i + 1) % 6 == 0);
发布于 2010-03-16 19:13:22
你想用LINQ做这件事有什么特别的原因吗?
为什么不写一个循环,每次递增6次,然后直接访问这个值呢?
https://stackoverflow.com/questions/2453799
复制相似问题