如何根据订单快速重新排序Ruby数组?

我有一个值数组,以及一个确定顺序的数组。

如何按给定顺序快速重新排列数组?

data = ['0','1','2','3','4','5'] order = [3,1,2,0,4,5] 

我想要:

 data = ['3','1','2','0','4','5'] 

 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"] 

您可以使用为此类任务编写的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"] 

不如使用Array#values_at @ Jakub答案(我认为这应该是接受的答案),但这里有一些其他有趣的选择:

 p data.sort_by.with_index{ |d,i| order[i] } p data.zip(order).sort_by(&:last).map(&:first)