Ruby 按属性存在对对象数组进行排序

Ruby 按属性存在对对象数组进行排序,ruby,Ruby,我有一个如下所示的对象数组: vendors = [ { name: "Junction" }, { name: "Woodside", is_new: "on" }, { name: "Midtown" } ] ruby通过属性“is_ne

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

vendors = [
           {
             name: "Junction"
           },
           {
             name: "Woodside",
             is_new: "on"
           },
           {
             name: "Midtown"
           }
          ]
ruby通过属性“is_new”的存在来排序这个数组的更好方法是什么。我希望具有“is_new”属性的对象显示在顶部。

方法如下:

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

方法如下:

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

还有另一种方法:

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

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

如果
:is_new
可能有一个值
nil
false
,请使用
v.key.(:is_new)
(与
v.has_key.(:is_new)
相同)。始终使用
键?
检查是否存在键不是一个坏主意。可能是
是新的
关闭的
或类似情况,在这种情况下,可能需要一个更健壮的
case
语句来解释各种可能性。如果
:is\u new
可能有一个值
nil
false
,请使用
v.key(:is\u new)
(与
v.has\u key?(:is\u new)相同)。始终使用
key?
检查是否存在密钥不是一个坏主意。可能是
是新的
“off”
或类似的情况,在这种情况下,可能需要更健壮的
case
语句来解释各种可能性。