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
语句来解释各种可能性。