重新排序数组

时间:2013-12-23 18:02:18

标签: c# xna

如何根据数组Y中相应值的大小重新排列数组X.

这就是我在伪代码中的意思:

Array X = Red, Yellow, Green, Blue

Array Y = 68.4, 42.3, 53.6, 69.3 (random positive doubles)

我想输出:

Array Z = Blue, Red, Green, Yellow

即。它按大小对数组Y的元素进行排名(因此它变为69.4,68.3,53.6,42.3),然后将相同的重新排序应用于数组X的元素,重新排序为蓝色,红色,绿色,黄

到目前为止,我的尝试是创建一个添加元素的列表,使用list.sort方法对它们进行重新排序,但说实话它完全是一团糟,因为我无法理解所需的逻辑。

编辑 - 使用双打而不是整数

4 个答案:

答案 0 :(得分:4)

Array.Sort特别重载。

只需使用:

Array.Sort(Y, X);

话虽如此,虽然您可以这样做,但我强烈建议您创建一个具有Colorint值的复合项的单个数组,然后对其进行排序在int上,而不是有两个不同的数组,其中每个数组的索引对应于“某事”的一个组件。它将使处理更容易。

答案 1 :(得分:1)

List<string> colors = new List<string>() { "Red", "Yellow", "Green", "Blue" };
List<double> order = new List<double>() { 68.4, 42.3, 53.6, 69.3 };

var newList = order.Select((item, inx) => new { item, inx })
                .OrderByDescending(x => x.item)
                .Select(x => colors[x.inx])
                .ToList();

答案 2 :(得分:0)

这可能会有所帮助:

List<Tuple<string, int>> values = new List<Tuple<string, int>>();
values.Add(new Tuple<string, int>("Red", 68));
values.Add(new Tuple<string, int>("Yellow", 42));
values.Add(new Tuple<string, int>("Green", 53));

var sortedValues = values.OrderByDescending(i => i.Item2).ToList();

答案 3 :(得分:0)

使用键值对列表可以获得更好的结果,然后您可以简单地按值排序并输出数组或键列表。

您正在寻找的文章中的Compare2方法:http://www.dotnetperls.com/sort-keyvaluepair