你如何对一组对象进行排序?

AnA*_*ice 5 ruby ruby-on-rails ruby-on-rails-3

我有一个对象如下:

[{:id=>2, :fname=>"Ron", :lname=>"XXXXX", :photo=>"XXX"}, {:id=>3, :fname=>"Dain", :lname=>"XXXX", :photo=>"XXXXXXX"}, {:id=>1, :fname=>"Bob", :lname=>"XXXXXX", :photo=>"XXXX"}] 
Run Code Online (Sandbox Code Playgroud)

我想通过fname对此进行排序,按字母顺序不区分大小写,因此会导致

id:1,3,2

我该怎么办呢?我尝试着:

@people.sort! { |x,y| y[:fname] <=> x[:fname] }
Run Code Online (Sandbox Code Playgroud)

但那没有效果.

Gaz*_*ler 13

您可以使用sort_by.

@people.sort_by! { |x| x[:fname].downcase }
Run Code Online (Sandbox Code Playgroud)

(小写是针对不区分大小写的)

为了完整起见,提供的代码的问题是:

  • 参数的顺序错误
  • downcase没有被调用

以下代码使用sort方法.

@people.sort! { |x,y| x[:fname].downcase <=> y[:fname].downcase }
Run Code Online (Sandbox Code Playgroud)

证明这两种方法都做同样的事情:

@people.sort_by {|x| x[:fname].downcase} == @people.sort { |x,y| x[:fname].downcase <=> y[:fname].downcase }
Run Code Online (Sandbox Code Playgroud)

返回true.