2009-12-26 167 views
18

如果我有两个数组,x和y,其中y是x中每个元素数十的值。现在,我想排序y。但是,y的顺序与x的顺序不同。所以,在排序y中的哪个元素与x有关之后,我无法判断,例如x [0]。我想要一个“双重排序”可能。你的帮助是无限的赞赏!对与另一个阵列相关的数组进行排序

+0

,我们在谈论什么语言?是否有任何性能限制? – 2009-12-26 20:10:15

+0

C#,没有约束 – 2009-12-26 20:13:31

回答

48

Array.Sortan overload接受两个数组;一个用于钥匙,另一个用于物品。的的项目是根据keys数组排序:

int[] keys = { 1, 4, 3, 2, 5 }; 
string[] items = { "abc", "def", "ghi", "jkl", "mno" }; 
Array.Sort(keys, items); 
foreach (int key in keys) { 
    Console.WriteLine(key); // 1, 2, 3, 4, 5 
} 
foreach (string item in items) { 
    Console.WriteLine(item); // abc, jkl, ghi, def, mno 
} 

所以你的情况,这听起来像你想:

Array.Sort(y,x); // or Sort(x,y); - it isn't 100% clear 
+5

+1,从来没有听说过这个小宝石'Array.Sort(x,y)'。 – 2009-12-26 20:38:51

+0

谢谢。真的有帮助。 – 2009-12-27 20:34:19

+0

吹我的脑海......非常有用。谢谢! – Totero 2013-05-01 14:56:26

1

如果y总是x的十数值,y可能不应该存在 - 您应该在需要时直接计算x的值。

通常,只有当排序算法采用自定义的“交换”函数时,才可以对并行数组进行排序(无需手动滚动排序算法),您可以通过同时交换两个数组中的元素来实现该函数。在C++中std :: sort和C中的qsort不允许这样做。

同样在一般情况下,考虑单个数组,其中元素是一对项目,而不是每个项目的并行数组。这使得使用“标准”算法更容易。

相关问题