Arrays 参照另一个数组对数组进行排序

Arrays 参照另一个数组对数组进行排序,arrays,ruby,Arrays,Ruby,我有两个不同的数组。比如说: a = [1, 2, 13, 4, 10, 11, 43] b = [44, 23, 1, 4, 10, 2, 55, 13] 现在我必须通过引用数组a对数组b进行排序。我尝试了以下解决方案: lookup = {} a.each_with_index do |item, index| lookup[item] = index end b.sort_by do |item| lookup.fetch(item) end 但是我得到了KeyError:k

我有两个不同的数组。比如说:

a = [1, 2, 13, 4, 10, 11, 43]
b = [44, 23, 1, 4, 10, 2, 55, 13]
现在我必须通过引用数组
a
对数组
b
进行排序。我尝试了以下解决方案:

lookup = {}
a.each_with_index do |item, index|
  lookup[item] = index
end

b.sort_by do |item|
  lookup.fetch(item)
end
但是我得到了
KeyError:key not found:44
错误。有人能帮我找到解决办法吗


预期输出是
[1,2,13,4,10,23,44,55]
比较数组检查第一个值,如果它相等,则转到第二个值,依此类推。因此,这将根据
a
中出现的顺序进行比较,然后根据
a
中未出现的实际值进行比较:

b.sort_by { |e| [a.index(e) || a.size, e] }

要保持O(nlogn),您可以:

ai = a.each_with_index.to_h
b.sort_by { |e| [ai[e] || a.size, e] }

比较数组检查第一个值,如果它相等,则检查第二个值,依此类推。因此,这将根据
a
中出现的顺序进行比较,然后根据
a
中未出现的实际值进行比较:

b.sort_by { |e| [a.index(e) || a.size, e] }

要保持O(nlogn),您可以:

ai = a.each_with_index.to_h
b.sort_by { |e| [ai[e] || a.size, e] }

我(我希望其他人)无法从一个例子中推断出你的问题。请编辑以文字陈述您的问题,然后,如有必要,给出一个或多个示例,每个示例都带有所需的结果。另外,请仔细检查您的值。这看起来很笨拙,而且不确定它是否健壮
((a&b)。请按{e | a.index(e)})+(b-(a&b)).sort#=>[1,2,13,4,10,23,44,55]排序。\n请提供有关排序逻辑的更多信息。不清楚为什么预期输出必须是
[1,2,13,4,10,23,44,55]
?我(以及我希望其他人)无法从一个例子中推断出您的问题。请编辑以文字陈述您的问题,然后,如有必要,给出一个或多个示例,每个示例都带有所需的结果。另外,请仔细检查您的值。这看起来很笨拙,而且不确定它是否健壮
((a&b)。请按{e | a.index(e)})+(b-(a&b)).sort#=>[1,2,13,4,10,23,44,55]排序。\n请提供有关排序逻辑的更多信息。不清楚为什么预期输出必须是
[1,2,13,4,10,23,44,55]
?我觉得这里的复杂性可以提高。也许可以通过对order数组进行散列,正如在问题中尝试的那样。但事实上,这肯定会起作用,是的。我觉得这里的复杂性可以得到改善。也许可以通过对order数组进行散列,正如在问题中尝试的那样。但事实上,这肯定会奏效,是的。