2014-10-03 2 views
1

У меня есть массив объектов, и мне нужно отсортировать их по значениям атрибута. Порядок сортировки задается во втором массиве.Как отсортировать массив объектов, используя значения из второго массива

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

Ваш заказ, заданный 'b', противоречив. Это означает, что 'ER' предшествует (и следует) самому. – sawa

ответ

4

Это должно работать:

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

Обратите внимание, что b не нужно иметь несколько копий ER; просто нужно указать, что ER предшествует WE и AD.

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

index функция возвращает позицию аргумента в его invocant:

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

И метод sort_by проходит входящий в комплект поставки блок для каждого элемента массива и использует результаты в качестве ключей для сортировки от.

+0

Хороший вопрос о 'ER'. Фактически, то, что дал ОП, противоречиво. Это означает, что 'ER' предшествует (и следует) самому. – sawa

Смежные вопросы