使用其他2个数组对数组进行排序

时间:2018-05-05 20:02:13

标签: c# arrays unity3d

这是一个奇怪的特殊情况,但我有3个阵列,都有灵活的尺寸(但相同)和贵重物品,我需要使用其他2个订购其中一个。 例如

int[] array1 = new int[0 ,1 ,1 ,1 ,0];
int[] array2 = new int[5 ,3 ,4 ,2 ,0];
int[] array3 = new int[0 ,1 ,2 ,3 ,4];

// Results array3 == [2,1,3,0,4]

我想先按第一个数组的值排序第三个数组,然后在第一个数组无法排序的情况下使用第二个数组。 有没有办法干净利落地完成它或者我是否需要对其进行硬编码?

2 个答案:

答案 0 :(得分:1)

正如那些家伙在评论中所说的那样,在元组或课堂上做这件事会更好

        var array1 = new int[] { 0, 1, 1, 1, 0};
        var array2 = new int[] { 5, 3, 4, 2, 0};
        var array3 = new int[] { 0, 1, 2, 3, 4};

        var listOfTuples = array1.Select((t, i) => new Tuple<int, int, int>(t, array2[i], array3[i])).ToList();
        listOfTuples = listOfTuples.OrderBy(t => new {t.Item1, t.Item2}).ToList();

这些将由array1然后是array2排序。

如果您想要一个没有tulples的解决方案,请在评论中添加。

答案 1 :(得分:1)

要让它与3.5之类的旧版本一起使用,请使用Select()将数组转换为匿名对象列表(基本上类似于元组)。然后使用OrderBy()ThenBy()根据第一个数组和第二个数组中的值对列表进行排序:

var array1 = new int[] { 0, 1, 1, 1, 0};
var array2 = new int[] { 5, 3, 4, 2, 0};
var array3 = new int[] { 0, 1, 2, 3, 4};

var list = array1.Select((t, i) => new { X1 = t, X2 = array2[i], X3 = array3[i] })
                 .OrderBy(t => t.X1) // first order by values from array1
                 .ThenBy(t => t.X2)  // then by values from array2
                 .Select(t => t.X3)  // we only want values from array3
                 .Reverse();         // put into right order

输出:

  

2 1 3 0 4