引用另一个数组对数组进行排序

时间:2017-06-14 05:56:34

标签: arrays ruby

我有两个不同的数组。让我们说:

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]

1 个答案:

答案 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] }