按索引获取数组项

时间:2018-05-04 13:25:03

标签: c# arrays

我有两个数组,一个是值,一个是索引

int[] items = { 1, 2, 3, 7, 8, 9, 13, 16, 19, 23, 25, 26, 29, 31, 35, 36, 39, 45 };
int[] indices = { 1, 3, 5, 6, 7, 9 };

现在我想要items数组索引选择的indices的结果数组

// 2, 7, 9, 13, 19
int[] result = new []{ items[1], items[3], items[5], items[6], items[7], items[9] }; 

问题:对此有更通用的方法吗?

4 个答案:

答案 0 :(得分:11)

var results = Array.ConvertAll(indices, i => items[i]);

答案 1 :(得分:3)

尝试使用 Linq

int[] items = { 1, 2, 3, 7, 8, 9, 13, 16, 19, 23, 25, 26, 29, 31, 35, 36, 39, 45 };
int[] indices = { 1, 3, 5, 6, 7, 9 };

int[] result = indices
  .Select(index => items[index])
  .ToArray();

答案 2 :(得分:1)

一个好的旧循环也应该能够完成这项工作:

int[] items = { 1, 2, 3, 7, 8, 9, 13, 16, 19, 23, 25, 26, 29, 31, 35, 36, 39, 45 };
int[] indices = { 1, 3, 5, 6, 7, 9 };

List<int> resultList = new List<int>();
for (int i = 0; i < indices.Length; i++)
{
     resultList .Add(items[indices[i]]);
}

说明:

使用[ ]运算符访问indices中的特定索引时,它将返回该数字。这可以再次用于索引/访问items中的特定位置。所以你有一个双重索引。

编辑:

如果您需要将结果作为数组,可以使用ToArray方法进行转换:

int [] result = resultList.ToArray();

答案 3 :(得分:1)

为了替代方案:

int[] result = items.Select((value, index) => new { Index = index, Value = value }) //Add indexes
                    .Where(w => indices.Contains(w.Index))                          //Filter by indexes
                    .Select(s => s.Value).ToArray();                                //Extract values to result array