首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从列表中选择每个第6个元素(使用Linq)

如何从列表中选择每个第6个元素(使用Linq)
EN

Stack Overflow用户
提问于 2010-03-16 19:10:05
回答 6查看 9.7K关注 0票数 20

我有一个“双精度”值的列表。我需要选择每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 (也许更快?)

代码语言:javascript
复制
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());
}

有什么建议吗?非常感谢!欢迎光临!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-16 19:52:34

代码语言:javascript
复制
coordinateRange.Where( ( coordinate, index ) => (index + 1) % 6 == 0 );

Webleeuw的答案发布在这个之前,但我认为使用索引作为参数比使用IndexOf方法更清楚。

票数 21
EN

Stack Overflow用户

发布于 2010-03-16 19:51:13

Where方法有一个重载,可以让您直接使用索引:

代码语言:javascript
复制
coordinateRange.Where((c,i) => (i + 1) % 6 == 0);
票数 6
EN

Stack Overflow用户

发布于 2010-03-16 19:13:22

你想用LINQ做这件事有什么特别的原因吗?

为什么不写一个循环,每次递增6次,然后直接访问这个值呢?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2453799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档