如何在给定顺序的情况下快速重新排序Ruby数组



我有一个值数组和一个确定顺序的数组。

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

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

我想要:

data = ['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"] 
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"]

不如@Jakub使用Array#values_at的答案(我认为这应该是公认的答案(,但这里有一些其他有趣的替代方案:

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

最新更新