基于预定义列表的Ruby排序

KJF*_*KJF 4 ruby sorting

我有一个数组objects.每个对象都有一个我们称之为的属性display_name.

我想根据预定义的值列表对此数组进行排序.

因此,如果预定义列表看起来像这样 ["Ball", "Cat", "Helicopter", "France"]

然后,display_name属性匹配的对象"Ball"位于列表的头部,列表中具有"Cat"第二个的对象,依此类推.

Ali*_*kau 8

您可以使用Enumerable#sort_by:

list = ["Ball", "Cat", "Helicopter", "France"] 
elements = [{:display_name => 'Cat'}, {:display_name => 'Unknown'}, {:display_name => 'Ball'}]

# sort by index in the list. If not found - put as last.
elements.sort_by { |e| list.index(e[:display_name]) || list.length } 
# => [{:display_name=>"Ball"}, {:display_name=>"Cat"}, {:display_name=>"Unknown"}]
Run Code Online (Sandbox Code Playgroud)