c#在索引中具有相同数字的情况下对2个数组进行排序

时间:2016-11-18 16:39:06

标签: c# sorting

我有2个阵列:

int[] x1 = { 1, 2, 1, 2 };
int[] x2 = { 3, 1, 2, 3 };

并用

对它们进行排序
Array.Sort(x1, x2);

数组看起来像这样:

int[] x1 = { 1, 1, 2, 2 };
int[] x2 = { 3, 2, 1, 3 };

但是我希望数组x2看起来像这样:

{3,2,3,1}

问题是,如果.sort在第一个数组(索引,这里是x1)中看到相同的数字,它将只是排序相同的数字,而不会看到x2数组,我想要它去做。那么,是否有可能以这种方式对其进行排序?

1 个答案:

答案 0 :(得分:1)

假设您有2个这样的数组:

int[] x1 = { 1, 2, 1, 2}; 
int[] x2 = {3, 1, 2, 3};

我要做的第一件事就是将它们连接在一起并应用排序。对于一些Linq来说,这很简单:

var joined = x1.Zip(x2, (a, b) => new { a, b })
   .OrderBy(x => x.a)
   .ThenByDescending(x => x.b);

现在您可以将它们拆分为组成数组:

x1 = joined.Select(x => x.a).ToArray();
x2 = joined.Select(x => x.b).ToArray();