我有一个值数组,以及一个确定顺序的数组。
如何按给定顺序快速重新排列数组?
data = ['0','1','2','3','4','5']
order = [3,1,2,0,4,5]
我想:
data = ['3','1','2','0','4','5']
答案 0 :(得分:23)
您可以使用为此类任务编写的values_at
方法:
data = ['0','1','2','3','4','5']
order = [3,1,2,0,4,5]
data.values_at *order
# => ["3", "1", "2", "0", "4", "5"]
答案 1 :(得分:9)
data = ["0", "1", "2", "3", "4", "5"]
order = [3, 1, 2, 0, 4, 5]
> order.map{|x| data[x]}
=> ["3", "1", "2", "0", "4", "5"]
如果您不确定索引是否正确,可以执行以下操作:
> order.map{|x| data.fetch(x)} # will raise an exception if index out of bounds
=> ["3", "1", "2", "0", "4", "5"]
答案 2 :(得分:5)
不如使用Array#values_at
的@ Jakub答案(我认为应该是接受的答案),但这里还有其他一些有趣的选择:
p data.sort_by.with_index{ |d,i| order[i] }
p data.zip(order).sort_by(&:last).map(&:first)