如何使用第二个数组中的值对对象数组进行排序

时间:2014-10-03 18:23:13

标签: ruby arrays sorting

我有一个对象数组,我需要按属性的值对它们进行排序。排序顺序在第二个数组中给出。

a = [ object1, object2, object3, object4]

object1.job = 'ER'
object2.job = 'AD'
object3.job = 'WE'
object4.job = 'ER'

b = ['ER', 'ER', 'WE', 'AD']

我需要对数组a进行排序,以便返回[object1/object4, object3, object2]。如何使用我的数组b作为排序键?

1 个答案:

答案 0 :(得分:4)

这应该有效:

sorted_a = a.sort_by { |obj| b.index obj.job }

请注意,b不需要拥有ER的多个副本;它只需要表明ER来自WEAD

b = ['ER', 'WE', 'AD']

index函数返回其参数在其调用中的位置:

b.index 'ER'  #=> 0
b.index 'AD'  #=> 2

sort_by方法在数组的每个元素上运行提供的块,并使用结果作为排序键。