0
array = [{ name:'Joe', class:'foo' },
         { name:'Bob', class:'bar' },
         { name:'Hal', class:'baz' },
         { name:'Kim', class:'qux' },
         { name:'Zoe', class:'bar' }
        ]

按以下顺序按类排序的好方法是什么:qux、bar、foo、baz?

4

2 回答 2

3

像这样,例如:

array = [{ name:'Joe', class:'foo' },
         { name:'Bob', class:'bar' },
         { name:'Hal', class:'baz' },
         { name:'Kim', class:'qux' },
         { name:'Zoe', class:'bar' }
        ]

order = %w[qux bar foo baz]

sorted = array.sort_by{|el| order.index(el[:class])}

sorted # => [{:name=>"Kim", :class=>"qux"}, 
       #     {:name=>"Bob", :class=>"bar"}, 
       #     {:name=>"Zoe", :class=>"bar"}, 
       #     {:name=>"Joe", :class=>"foo"}, 
       #     {:name=>"Hal", :class=>"baz"}]
于 2013-02-12T03:45:02.513 回答
2
order = %w[qux bar foo baz]
array.sort_by{|h| order.index(h[:class])}

给出:

[
  {
    :name  => "Kim",
    :class => "qux"
  },
  {
    :name  => "Bob",
    :class => "bar"
  },
  {
    :name  => "Zoe",
    :class => "bar"
  },
  {
    :name  => "Joe",
    :class => "foo"
  },
  {
    :name  => "Hal",
    :class => "baz"
  }
]
于 2013-02-12T03:44:26.653 回答