Lambda表达式选择索引>所有项目X

时间:2014-01-22 12:51:25

标签: c# .net-4.0 lambda

我有一个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 = ?

2 个答案:

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