假设我们有两个数组:
a = [4,3,8,7]
b = [(1,2),(5,6),(8,6),(9,0)]
所以我们现在想要的是对数组a进行排序。
所以排序的结果应该是a_sorted = [3,4,7,8]
。
并且,我们不能对数组b进行排序。
相反,必须根据数组a的排序顺序更改数组b的顺序。
因此,数组b必须为b_sorted = [(5,6),(1,2),(9,0),(8,6)]
即,a_sorted的顺序为a_sorted = [a[1],a[0],a[3],a[2]]
。
相应地,b_sorted = [b[1],b[0],b[3],b[2]]
问题更简单。这种排序有名字吗? :
答案 0 :(得分:3)
你只是找到一个数组的排序排列(a为[2,1,4,3])并将其应用于另一个数组。许多语言处理得很好。
例如,在Matlab中,您可以拨打[sortedA, sortedBy] = sort([4 3 8 7]);
然后sortedA = a(sortedBy) = [3 4 7 8]
和sortedBy = [2 1 4 3]
,这样您的新b就会b(sortBy)
。
答案 1 :(得分:2)
我认为没有这样的名字。请注意,这样的“并行数组”通常是不受欢迎的,并且经常被新的编程人员(学生)使用,他们没有被教过如何正确使用类(没有冒犯意味着)。如果两个数组之间存在关系,则应将它们放在某种对象中,然后应该对该对象进行排序。
当然,这完全取决于具体情况。有人可能正在使用一种无法在(自定义)对象中对相关属性进行分组的语言。
答案 2 :(得分:2)
实际上,这种事情并不罕见,尽管今天它比过去更不普遍。它是标记排序思想的扩展,其中键被排序,然后按顺序读取和写入相应的记录。您通常在以下情况下使用标记排序:
OR
第二个问题现在经常不是一个问题,因为你通常会对引用数组进行排序,这意味着唯一可以交换的东西是指针 - 每个字节4个字节或8个字节。
某些API内置支持此类并行数组排序。例如,.NET Array
类的Sort(array, array)方法与您描述的方法完全相同。
答案 3 :(得分:1)
将b
的值添加到a
的键中,以便获得多维数组。然后对该数组进行排序。
答案 4 :(得分:0)
是的,在PHP中有一个名为array_multisort的数组排序函数可以满足您的需求。