按另一个数组排序数组

时间:2015-04-02 17:30:47

标签: ruby arrays

我有两个数组:

a = [ 1, 0, 2, 1, 0]
b = ['a', 'b', 'c', 'd', 'e']

我想根据b的元素值排序a数组。 我可以通过将两个数组合并为Hash和按键的顺序来实现:

h = Hash[b.zip a]
=> {"a"=>1, "b"=>0, "c"=>2, "d"=>1, "e"=>0}

h2 = Hash[h.sort_by{|k, v| v}]
=> {"b"=>0, "e"=>0, "a"=>1, "d"=>1, "c"=>2}

array = h2.keys
=> ["b", "e", "a", "d", "c"]

如果存在平局,则可以任意选择订单。

有没有办法(可能更紧凑),我可以在不使用哈希的情况下实现这一目标。

2 个答案:

答案 0 :(得分:3)

a.zip(b).sort.map(&:last)

部分内容:

p a.zip(b) # => [[1, "a"], [0, "b"], [2, "c"], [1, "d"], [0, "e"]] 
p a.zip(b).sort # => [[0, "b"], [0, "e"], [1, "a"], [1, "d"], [2, "c"]] 
p a.zip(b).sort.map(&:last) # => ["b", "e", "a", "d", "c"]

答案 1 :(得分:2)

a = [ 1, 0, 2, 1, 0]
b = ['a', 'b', 'c', 'd', 'e']

p b.sort_by.each_with_index{|el,i| a[i]}
# => ["b", "e", "a", "d", "c"]