按属性存在排序对象数组

rox*_*xxy 1 ruby

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

vendors = [
           {
             name: "Junction"
           },
           {
             name: "Woodside",
             is_new: "on"
           },
           {
             name: "Midtown"
           }
          ]
Run Code Online (Sandbox Code Playgroud)

什么是更好的方式ruby通过属性"is_new"的存在来订购这个数组.我希望带有"is_new"属性的对象出现在顶部.

tad*_*man 6

sort_by方法:

vendors.sort_by { |v| v[:is_new] ? 0 : 1 }
Run Code Online (Sandbox Code Playgroud)

您只需要创建每个元素使用的"排序键",然后对数组进行排序,就好像它们是值一样.任何可排序的值,如数字或字符串都可以使用.

  • 如果`:is_new`可以有一个值`nil`或`false`,请使用`v.key?(:is_new)`(与`v.has_key?(:is_new)`相同).总是使用`key?`来检查密钥的存在并不是一个坏主意. (2认同)
  • 可能是'is_new`是'off'或类似的情况,在这种情况下,可能需要更强大的`case`语句来解释各种可能性. (2认同)