按属性存在排序对象数组

时间:2015-04-09 15:35:21

标签: ruby

我有一个对象数组,如下所示:

vendors = [
           {
             name: "Junction"
           },
           {
             name: "Woodside",
             is_new: "on"
           },
           {
             name: "Midtown"
           }
          ]

通过存在属性" is_new"来订购此数组的更好方法是什么?我希望对象带有" is_new"属性显示在顶部。

2 个答案:

答案 0 :(得分:6)

sort_by方法:

vendors.sort_by { |v| v[:is_new] ? 0 : 1 }

您只需要创建每个元素使用的“排序键”,然后对数组进行排序,就像这些值一样。任何可排序的值,如数字或字符串都可以使用。

答案 1 :(得分:0)

这是另一种方式:

vendors.select { |h| h.key?(:is_new) } + vendors.reject { |h| h.key?(:is_new) }
  # => [{:name=>"Woodside", :is_new=>"on"}, {:name=>"Junction"},
  #     {:name=>"Midtown"}]