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

C#中如何从行列非连续的二维数组中访问元素

实现思路

核心是先建立角度到数组索引的映射关系,不用每次计算,直接通过角度快速定位索引,再取对应值。

步骤1:存储角度与索引的映射

读取文件时,同步记录垂直角度(行)和水平角度(列)的列表,然后用字典建立角度到索引的映射:

// 假设读取到的垂直角度列表(比如[1,6,11,...,180])
List<int> verticalAngles = new List<int>();
// 读取到的水平角度列表(比如[0,5,10,...,360])
List<int> horizontalAngles = new List<int>();
// 建立映射字典
Dictionary<int, int> verticalAngleToIndex = verticalAngles.Select((angle, idx) => new { angle, idx })
                                                         .ToDictionary(x => x.angle, x => x.idx);
Dictionary<int, int> horizontalAngleToIndex = horizontalAngles.Select((angle, idx) => new { angle, idx })
                                                           .ToDictionary(x => x.angle, x => x.idx);

步骤2:快速取值

有了映射字典后,直接通过目标角度获取索引,再从二维数组取值:

// 假设已经填充好的二维数据数组
double[,] dataArray = new double[verticalAngles.Count, horizontalAngles.Count];

// 目标角度
int targetVertical = 3;
int targetHorizontal = 20;

// 取值
if (verticalAngleToIndex.ContainsKey(targetVertical) && horizontalAngleToIndex.ContainsKey(targetHorizontal))
{
    int row = verticalAngleToIndex[targetVertical];
    int col = horizontalAngleToIndex[targetHorizontal];
    double value = dataArray[row, col];
    // 处理获取到的值
}
else
{
    // 处理目标角度不存在的情况,比如抛出异常或返回默认值
}

额外优化

  • 如果存在角度不严格匹配的场景(比如要找最接近3度的角度),可以通过遍历角度列表找差值最小的项:
int closestVertical = verticalAngles.OrderBy(a => Math.Abs(a - targetVertical)).First();
int row = verticalAngleToIndex[closestVertical];
  • 可以把映射逻辑封装成一个工具类,复用在不同文件的处理流程中。

内容的提问来源于stack exchange,提问作者Darren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:12