我有一个清单,可以说 3600 项。我想使用例如因子 5 来精简该列表。因此(新)列表中将保留 720 个项目。但不改变列表的“路线”。起点和终点应始终保持不变。
喜欢:1 ->跳过 30 -> 31
怎么做?
应该是这样的:
var last = list.Count - 1;
var thin = list.Where ((item, i) => i % 30 == 0 || i == last);
如果我正确理解你的观点。
请注意thin
will 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 示例,了解更高级的过滤、聚合和分组。
尝试这个:
var thin = list.Where(a => a % 2 == 0).Union(new List<int> { list.Min(), list.Max() }).OrderBy(a => a);
这应该得到第一个和最后一个值,加上中间的一些。