这是一个奇怪的特殊情况,但我有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]
我想先按第一个数组的值排序第三个数组,然后在第一个数组无法排序的情况下使用第二个数组。 有没有办法干净利落地完成它或者我是否需要对其进行硬编码?
答案 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