我如何使用linq从索引数组到对象集合

本文关键字:数组 对象 集合 索引 何使用 linq | 更新日期: 2023-09-27 18:08:49

我的标题问题有点模糊,因为很难问,但我的情况是:

我有一个int数组,它是一个单独的对象集合的索引。

数组是这样的:

int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ };

这些索引中的每一个都对应于我所拥有的集合中该索引处的对象。

我希望能够使用我的数组中的索引来构建这些对象的新集合。

我如何使用一些LINQ函数做到这一点?

我如何使用linq从索引数组到对象集合

int[] indices = { 0, 2, 4, 9, 10, 11, 13 };
string[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q" };
IEnumerable<string> results = indices.Select(s => strings[s]);
// or List<string> results = indices.Select(s => strings[s]).ToList();
foreach (string result in results) // display results
{
    Console.WriteLine(result);
}

当然可以将字符串等更改为对象集合

应该这样做:

List<int> items = Enumerable.Range(1,100).ToList();
int[] indices = { 0, 2, 4, 9, 10, 11, 13, /* more (non-)sequential indices */ };
var selectedItems = indices.Select( x => items[x]).ToList();

基本上,对于索引集合中的每个索引,您使用索引器将其投影到items集合中的相应项目(无论这些项目是什么类型)。

如果您的目标集合只是一个IEnumerable<SomeType>,那么您可以选择使用ElementAt()而不是索引器:

var selectedItems = indices.Select(x => items.ElementAt(x)).ToList();