从列表

时间:2017-04-24 16:42:49

标签: c# list linq ienumerable

c#中是否有linq函数,可以从特定范围的索引中收集IEnumerables?

一个例子是

        var objectArray = new string[] { "Bill", "Bob", "Joe", "Phil", "Tom", "Paul" };
        var indexArray = new int[] { 1, 3, 5 };

        var list = objectArray.Where(SOME_FUNCTION_TO_GET_INDEXES ??).ToList();

        //output would be list:
        //Bob
        //Phil
        //Paul

2 个答案:

答案 0 :(得分:9)

只需将SelectindexArray一起使用,然后通过索引从objectArray返回该项目。

var list = indexArray.Select(i => objectArray[i]);

请注意,对于允许编制索引的任何集合(例如,ArrayList<T>),这都非常有效。在具有IEnumerableICollection的更一般情况下,您将无法直接索引。在这种情况下,您需要看到Jon的答案。根据所涉及列表的大小以及您需要查找的项目数量,可能值得将IEnumerable转换为ArrayList(使用ToArray例如)首先。

答案 1 :(得分:8)

如果索引已经可以访问原始数据源,例如列表或数组,则可以像Matt所示使用indexArray.Select

如果您有IEnumerable<T>,则可以使用提供索引和值的Where重载。所以:

var list = objectArray.Where((value, index) => indexArray.Contains(index))
                      .ToList();