我有一個objects
的數組。每個對象都有一個屬性,我們將其稱爲display_name
。基於預定義列表的紅寶石排序
我想基於預定義的值列表對這個數組進行排序。
因此,如果預定義列表看起來像這樣["Ball", "Cat", "Helicopter", "France"]
然後與DISPLAY_NAME屬性相匹配"Ball"
與在列表的頭,那些在名單"Cat"
秒等等等等的對象。
我有一個objects
的數組。每個對象都有一個屬性,我們將其稱爲display_name
。基於預定義列表的紅寶石排序
我想基於預定義的值列表對這個數組進行排序。
因此,如果預定義列表看起來像這樣["Ball", "Cat", "Helicopter", "France"]
然後與DISPLAY_NAME屬性相匹配"Ball"
與在列表的頭,那些在名單"Cat"
秒等等等等的對象。
您可以使用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"}]
你應該能夠做這樣的事情:
require 'ostruct'
list = %w{Ball Cat Helicopter France}
items = [
OpenStruct.new(:display_name => 'Helicopter'),
OpenStruct.new(:display_name => 'France'),
OpenStruct.new(:display_name => 'Ball'),
OpenStruct.new(:display_name => 'Cat'),
]
items.sort { |x,y| list.index(x.display_name) <=> list.index(y.display_name) }
注意,如果你有相同的顯示名稱的多個項目,這是不確定性的。