我有一个如下对象:
[{:id=>2, :fname=>"Ron", :lname=>"XXXXX", :photo=>"XXX"}, {:id=>3, :fname=>"Dain", :lname=>"XXXX", :photo=>"XXXXXXX"}, {:id=>1, :fname=>"Bob", :lname=>"XXXXXX", :photo=>"XXXX"}]
我想按fname对此进行排序,按字母顺序不区分大小写,因此会导致
id:1,3,2
我该如何排序?我在尝试:
@people.sort! { |x,y| y[:fname] <=> x[:fname] }
但这没有效果。
答案 0 :(得分:13)
您可以使用sort_by。
@people.sort_by! { |x| x[:fname].downcase }
(小写用于不区分大小写)
为完整起见,提供的代码存在以下问题:
以下代码使用排序方法。
@people.sort! { |x,y| x[:fname].downcase <=> y[:fname].downcase }
证明这两种方法都做同样的事情:
@people.sort_by {|x| x[:fname].downcase} == @people.sort { |x,y| x[:fname].downcase <=> y[:fname].downcase }
返回 true 。