我有一个List,其中包含int
类型的数组。使用lambda表达式如何选择索引大于2的所有项目的列表?
例如,下面的列表应返回8和9:
var items = new List<object>()
{
new int[3] { 1, 2, 3 },
new int[1] { 4 },
new int[5] { 5, 6, 7, 8, 9 }
};
//var overTwoIndexItems = ?
答案 0 :(得分:3)
您可以使用Skip
跳过每个数组中的前三项(即索引为0,1和2的项目)。您可以使用SelectMany
来平展结果:
var overTwoIndexItems = items.SelectMany(a => ((int[])a).Skip(3));
或更安全的版本(当您向对象列表添加非整数数组的内容时将处理这种情况):
var overTwoIndexItems = items.OfType<int[]>().SelectMany(a => a.Skip(3));
结果:
8, 9
BTW:你为什么使用object
列表?看起来像ArrayList
。泛型的要点是强类型参数。请改用List<int[]>
。然后查询将如下所示:
items.SelectMany(a => a.Skip(3))
答案 1 :(得分:2)
@Sergey有正确的方法,但鉴于它是IList<object>
,你需要先将其投射。
var result = items.Select (x => (int[])x).SelectMany (x => x.Skip(3));
//result = new int[]{ 8, 9 };