一种简洁的方法是将两个数组"压缩"到一个元组数组中,按速度对元组进行排序,然后将元组拆分为两个数组:
var tuples = cars.Zip(speeds, (car, speed) => (car, speed))
.OrderByDescending(tuple => tuple.speed)
.ToList();
string[] sortedCars = tuples.Select(tuple => tuple.car).ToArray();
int[] sortedSpeeds = tuples.Select(tuple => tuple.speed).ToArray();
通过向Zip添加更多调用,您可以对三个或更多数组进行排序:
var tuples = cars.Zip(speeds, (car, speed) => (car, speed))
.Zip(colors, (tuple, color) => (tuple.car, tuple.speed, color))
// .Zip(weights, (tuple, weight) => (tuple.car, tuple.speed, tuple.color, weight))
.OrderByDescending(tuple => tuple.speed)
.ToList();
string[] sortedCars = tuples.Select(tuple => tuple.car).ToArray();
int[] sortedSpeeds = tuples.Select(tuple => tuple.speed).ToArray();
string[] sortedColors = tuples.Select(tuple => tuple.color).ToArray();
// int[] sortedWeights = tuples.Select(tuple => tuple.weight).ToArray();
但在这一点上,正如Guru Stron所指出的,您真的应该考虑引入一个Car类,而不是使用单独的array.