我有两个不同的数组。让我们说:
a = [1, 2, 13, 4, 10, 11, 43]
b = [44, 23, 1, 4, 10, 2, 55, 13]
现在我必须通过引用数组b
对数组a
进行排序。我尝试了以下解决方案:
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]
。
答案 0 :(得分:4)
比较数组会检查第一个值,如果它等于第二个值,依此类推。因此,这将按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] }