如何在C#中通过多个索引操作数组?
在C#中按索引数组提取元素的实现方式
假设有两个数组:
double[] array1 = new double[] {22.5, 15, 33.7, 42, 17, 7.5, 3.5, 1, 17.5, 7.7, 5}; int[] idx = new int[] { 1, 4, 5, 8};
需要生成一个新数组,仅包含array1中与idx索引匹配的元素,预期结果:
{15, 17, 7.5, 17.5}
熟悉MATLAB的话原本可以直接写:
array2=array1[idx];
但C#的[]索引仅支持单个元素查询,请问推荐的实现方式是什么?
推荐实现方式
1. 使用LINQ(最简洁)
如果项目已引用System.Linq,可以用一行代码完成需求:
double[] array2 = idx.Select(i => array1[i]).ToArray();
遍历idx中的每个索引,取出array1对应位置的元素,最后转换为数组。
2. 手动循环(无LINQ依赖)
若不想依赖LINQ或需要更底层的控制,可使用普通循环实现:
double[] array2 = new double[idx.Length]; for (int i = 0; i < idx.Length; i++) { array2[i] = array1[idx[i]]; }
先创建与索引数组长度一致的新数组,再逐个赋值,逻辑直观且性能稳定。
3. .NET 6+ 新增的Array.ConvertAll
.NET 6及以上版本可使用Array.ConvertAll方法,写法简洁且性能优异:
double[] array2 = Array.ConvertAll(idx, i => array1[i]);
该方法专门用于数组间的转换,内部实现接近手动循环,代码更紧凑。
内容的提问来源于stack exchange,提问作者Karls
相关产品推荐
相关产品推荐

