C#中如何按速度从高到低关联排序汽车与速度数组?
按速度降序排列对应数组的C#实现
你提供的示例里,speeds数组中Ford对应的速度是200,但期望结果里写的是300,应该是笔误。下面的代码会基于你给出的原始数组(speeds = {150,130,200,110})实现排序,得到对应降序后的结果。
在C#中,最稳妥的做法是先将汽车和对应的速度配对,排序后再拆分回两个数组,避免单独操作两个数组导致元素对应关系错乱。具体实现步骤如下:
- 将两个数组的元素按索引一一配对,生成包含汽车和速度的序列
- 按速度从高到低对该序列排序
- 分别提取排序后的汽车名称和速度,生成新的数组
完整代码示例:
using System; using System.Linq; class Program { static void Main() { string[] cars = {"Volvo", "BMW", "Ford", "Mazda"}; int[] speeds = {150, 130, 200, 110}; // 配对汽车与速度,按速度降序排序 var sortedPairs = cars.Zip(speeds, (car, speed) => new { Car = car, Speed = speed }) .OrderByDescending(pair => pair.Speed); // 提取排序后的汽车数组 string[] sortedCars = sortedPairs.Select(pair => pair.Car).ToArray(); // 提取排序后的速度数组 int[] sortedSpeeds = sortedPairs.Select(pair => pair.Speed).ToArray(); // 输出验证结果 Console.WriteLine("排序后的汽车数组:"); foreach (var car in sortedCars) Console.WriteLine(car); Console.WriteLine("\n排序后的速度数组:"); foreach (var speed in sortedSpeeds) Console.WriteLine(speed); } }
代码说明:
Zip方法用于将两个数组的元素按索引一一配对,生成包含Car和Speed的匿名类型序列OrderByDescending方法实现按速度降序排序整个序列- 最后通过
Select分别提取汽车和速度字段,再用ToArray()转换为目标数组
运行代码后得到的结果:
sortedCars:{"Ford", "Volvo", "BMW", "Mazda"}sortedSpeeds:{200, 150, 130, 110}
如果你确实需要Ford的速度为300,只需修改原始speeds数组中对应位置的值即可,代码逻辑无需调整。
内容的提问来源于stack exchange,提问作者gold recovery sayf
相关产品推荐
相关产品推荐

