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