从列表中收集索引

Ale*_*unt 0 c# linq ienumerable list

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

一个例子是

        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
Run Code Online (Sandbox Code Playgroud)

Mat*_*and 9

只需使用Select您的indexArrayobjectArray通过索引返回项目.

var list = indexArray.Select(i => objectArray[i]);
Run Code Online (Sandbox Code Playgroud)

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

  • 当然,我大肆过度思考:) (3认同)

Jon*_*eet 8

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

如果你有一个IEnumerable<T>替代,你可以使用Where提供索引和值的重载.所以:

var list = objectArray.Where((value, index) => indexArray.Contains(index))
                      .ToList();
Run Code Online (Sandbox Code Playgroud)