我有两个数组,一个是值,一个是索引
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] };
问题:对此有更通用的方法吗?
答案 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