You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:37:12