对具有降序ID的多个键值上的哈希数组进行排序-Ruby

时间:2018-08-03 16:27:31

标签: ruby-on-rails

我有一个由其他两个数组组成的数组,每个数组都是由所有者分组的pets,然后按如下所示的方法进行排序:

def all_pets

     #set order by fur color
     order = ['Dogs', 'Cats', 'Reptiles', 'Other']

     all_pets = first_pet_array + second_pet_array  
     #^two arrays being added together

     all_pets.sort_by {|r| [order.index(r[:pet_type])]}

end

我的输出看起来像这样:

       [{:owner=>"Mike", :names=>["Fido", "Sam"], :ids=>[234, 871], :pet_type => "Dogs"} ,
        {:owner=>"Becca", :names=>["Sparky", "Paws"], :ids=>[833, 287], :pet_type => "Dogs"} ,
        {:owner=>"Tom", :names=>["Pepper"], :ids=>[143], :pet_type => "Dogs"} ,
        {:owner=>"Andy", :names=>["Whiskers", "Fred"], :ids=>[068, 978], :pet_type => "Cats"} ,
        {:owner=>"Amy", :names=>["Benny"], :ids=>[567], :pet_type => "Cats"} ,
        {:owner=>"Chris", :names=>["Toothless", "Ka"], :ids=>[169, 659], :pet_type => "Reptiles"} ,
        {:owner=>"John", :names=>["Moe", "Scaley"], :ids=>[993, 036], :pet_type => "Reptiles"} ,
        {:owner=>"Jenny", :names=>["Susie", "Howie"], :ids=>[555, 075], :pet_type => "Other"}]

我想先按all_petspet_type进行排序,然后再按降序对ids进行排序。我已经按all_pets排序了pet_type,这很好。

但是,我坚持按all_petsids进行排序之后,对pet_type进行降序排序。经过一番阅读后,我看到了类似问题的答案,其中有些人建议使用-r[:ids]开头的内容按ID降序排列。

但是,当我将其添加到我的sort_by行中时,就像这样:

all_pets.sort_by {|r| [order.index(r[:pet_type]), -r[:ids]]}

我收到一条错误消息,内容为:

undefined method `-@' for [234, 871]:Array

我相信我会收到此错误,因为有两个ID?在这种情况下,我该如何按ids降序排序?

谢谢!

0 个答案:

没有答案