我有 N 个项目列表
例如:
A、B、C、D
1, 2, 3
V、W、X、Y、Z
它们被扁平化为一个长列表,用户可以根据自己的喜好选择顺序
例如:
1, C, X, 3, B, A, Y, Z, 2, W, D, V
我需要重新排序我的 N 个原始列表,以便它们的相对排序顺序与用户的排序相匹配
例如:
C、B、A、D
1, 3, 2
X, Y, Z, W, V
简单的蛮力方法是创建 N 个新的空容器,遍历用户的订单,并在遇到每个项目时将其添加到相关容器中。
有没有更优雅的方法?
最佳答案
除非可以对数据的排序做出假设,否则可能没有更优雅的方法。
您必须在某个时候创建 N 个新容器中的每一个。
您还必须在某个时候向这 N 个容器中添加必要的元素。
这两件事是避免不了的。您的方法仅包含这两者,仅此而已,因此被证明是最小的。
一个小警告是 block 数组复制比迭代复制稍微快一些,所以如果你知道大块是相同的,那么你可以为这些 block 制作一个稍微快一些的复制。但通常,为了获得该信息,您必须首先访问和分析数据。因此,与其访问和分析,不如访问和插入。
关于从全局排序顺序对 N 个不同列表进行排序的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750778/