解决double二维数组构建报错及查找指定最小值对应元素和问题
解决数组Append报错并实现寻找最小z轴子数组的需求
我来帮你搞定这个问题!首先看你遇到的报错核心原因:double[]是固定长度的数组,它本身没有Append方法,而LINQ的Append扩展方法只适用于实现了IEnumerable<T>的动态集合类型。咱们换个思路,用动态集合存储子数组,同时优化逻辑让代码更简洁高效。
下面是修正后的完整代码,我会标注关键改动点:
if (readByCount > 30) { var output = (new string(buff).TrimEnd('\u0000')); Console.WriteLine(output); // 拆分字符串并直接转换为double类型的子数组集合 var subArrays = output.Split(new[] { ";;" }, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Split(';').Select(double.Parse).ToArray()) .ToList(); // 寻找索引为4的元素值最小的子数组(.NET 6+支持MinBy方法) var targetSubArray = subArrays.MinBy(arr => arr[4]); // 输出该子数组第0和第1个元素的和 if (targetSubArray != null) { double sum = targetSubArray[0] + targetSubArray[1]; Console.WriteLine($"目标子数组第0、1元素之和:{sum}"); } }
关键改动与说明:
- 替换固定数组为List:把原来的
double[] MediumArray换成List<double[]>(这里直接复用拆分后的subArrays),List支持动态添加元素,完美适配你拆分后不确定数量的子数组场景,彻底解决Append报错的问题。 - 简化类型转换流程:拆分字符串时直接将每个子串转换为
double[],省去了JToken转换的冗余步骤,代码更简洁高效。 - 用LINQ简化查找逻辑:使用
MinBy方法可以一步找到索引4元素最小的子数组。如果你的项目基于.NET 5或更早版本,可以用以下替代写法:// .NET 5及以下版本的兼容写法 double minZValue = subArrays.Min(arr => arr[4]); var targetSubArray = subArrays.First(arr => arr[4] == minZValue);
补充说明原代码的问题:
你写的MediumArray.Append<double[]>(innerArray);之所以报错,一是因为double[]不支持Append方法,二是即使你强制转换为IEnumerable<double[]>,Append也不会修改原数组,而是返回一个新的集合,根本达不到你想添加元素到原数组的目的。用List<double[]>的Add方法才是动态添加元素的正确方式。
内容的提问来源于stack exchange,提问作者Vedant Gonnade
相关产品推荐
相关产品推荐

