2016-11-18 46 views
0

相同数量的我有2个数组:C#排序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阵列,这是我想它要做的。那么,是否有可能通过这种方式进行分类?

+4

所以要通过列1,然后为了通过降COLUMN2订购?请向我们展示您拥有的阵列 - 给我们提供代码!同时显示你到目前为止所尝试过的。 – DavidG

+1

如果数据相关的第一件事是将它结合成像'列出一个集合<元组>'而不是两个单独的阵列。 – juharr

+1

@Gavin看起来2阵列是耦合的,IMO应该遵循@ juharr的建议。在逻辑上他有'[1,3]','[1,2]','[2,1]'和'[2,3]',他希望相等的第一列值以反向排序在它们的列2值上,即'[2,3]'应该在'[2,1]'之前。 – Quantic

回答

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();