对与另一个数组相关的数组进行排序

如果我有两个数组,x和y,其中y是x中每个元素的十个数值。 现在,我想排序。 但是,y的顺序与x的顺序不同。 所以,在排序y中哪个元素与之相关后,我无法分辨,例如x [0]。 我想要一个“双重排序”。 非常感谢您的帮助!

Array.Sort有一个接受两个数组的重载 ; 一个用于钥匙,一个用于物品。 两者的项目根据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 

如果y始终是x的十位值,则y可能不应该存在 – 您可能只需要在需要时直接从x计算它的值。

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

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

怎么样?

 var selectedArr = new int[] { 1, 3, 5, 7, 9 }; var unorderArr = new int[] { 9, 7, 5, 3, 1 }; var orderedArr = unorderArr.OrderBy(o => selectedArr.IndexOf(o));