如何根据double类型面积数组对关联字符串数组进行排序?
问题分析与解决方案
你的操作确实有误,核心问题在于先单独排序shapeArea的行为破坏了数组间的关联关系:
当你执行Array.Sort(shapeArea)时,面积数组的元素顺序被打乱,但shapeTypes和shapeColor的顺序未同步变更,此时面积和对应形状、颜色的绑定关系已经断裂,后续再执行Array.Sort(shapeArea, shapeTypes)自然无法得到正确的关联排序结果。
正确的Array.Sort用法
你需要使用Array.Sort的重载方法,直接以shapeArea为排序依据,同步排序另外两个关联数组,不需要单独提前排序面积数组:
string[] shapeTypes = {"circle", "triangle", "square" }; string[] shapeColor = { "red", "blue", "orange" }; double[] shapeArea = { 20, 5, 4 }; // 按面积升序,同步排序形状类型数组 Array.Sort(shapeArea, shapeTypes); // 再按同样的面积顺序,同步排序颜色数组 Array.Sort(shapeArea, shapeColor);
执行后三个数组会保持对应关系,得到你期望的排序结果:
shapeTypes={"square", "triangle", "circle"}shapeColor={"orange", "blue", "red"}shapeArea={4, 5, 20}
更稳健的面向对象方案
使用独立数组维护关联数据很容易出错,推荐将形状的属性封装成类,再对对象集合排序,逻辑更清晰且易维护:
// 定义形状类 public class Shape { public string Type { get; set; } public string Color { get; set; } public double Area { get; set; } } // 初始化形状集合 List<Shape> shapes = new List<Shape> { new Shape { Type = "circle", Color = "red", Area = 20 }, new Shape { Type = "triangle", Color = "blue", Area = 5 }, new Shape { Type = "square", Color = "orange", Area = 4 } }; // 按面积升序排序 var sortedShapes = shapes.OrderBy(s => s.Area).ToList(); // 若需要单独的数组,可从排序后的集合中提取 string[] sortedTypes = sortedShapes.Select(s => s.Type).ToArray(); string[] sortedColors = sortedShapes.Select(s => s.Color).ToArray(); double[] sortedAreas = sortedShapes.Select(s => s.Area).ToArray();
这种方式不仅避免了数组关联错误,后续扩展属性(如周长、边长)也更方便。
内容的提问来源于stack exchange,提问作者nuela
相关产品推荐
相关产品推荐

