C#精简列表<>

时间:2012-12-21 21:18:43

标签: c# list

我有一个列表,可以说3600项。我希望使用例如因此5.(新)列表中将保留720个项目。但是没有改变列表的“过程”。起点和终点应始终保持不变。

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

怎么做?

2 个答案:

答案 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);

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