0

我有一个清单,可以说 3600 项。我想使用例如因子 5 来精简该列表。因此(新)列表中将保留 720 个项目。但不改变列表的“路线”。起点和终点应始终保持不变。

喜欢:1 ->跳过 30 -> 31

怎么做?

4

2 回答 2

13

应该是这样的:

var last = list.Count - 1;
var thin = list.Where ((item, i) => i % 30 == 0 || i == last);

如果我正确理解你的观点。

请注意thinwill beIEnumerable<int>和 not List<int>
通常这就足够了——您可以在foreach循环中枚举它并使用其他 LINQ 方法。
但它会被懒惰地评估,也就是说,如果你原来的list改变,thin也会改变。

如果你想得到一个List<int>,只需附加一个ToList ()调用:

var last = list.Count - 1;
var thin = list.Where ((item, i) => i % 30 == 0 || i == last)
               .ToList ();

同样,要获取数组,请使用ToArray ().

不要忘记添加using System.Linq;此功能。
另请参阅101 LINQ 示例,了解更高级的过滤、聚合和分组。

于 2012-12-21T21:20:47.983 回答
0

尝试这个:

 var thin = list.Where(a => a % 2 == 0).Union(new List<int> { list.Min(), list.Max() }).OrderBy(a => a);

这应该得到第一个和最后一个值,加上中间的一些。

于 2012-12-21T21:31:09.410 回答