在Rails中按字母顺序排序

5

我该如何在Rails中对数组进行排序(按字母顺序)?我已经尝试过:

sort_by(&:field_name) 

这给我一个以大写字母顺序排列,然后是小写字母顺序排列的数组。我尝试过:
array.sort! { |x,y| x.field_name.downcase <=> y.field_name.downcase }

有没有什么方法可以解决这个问题?

3
请粘贴您的示例数组。 - Rails Guy
样例数组[john,Alice,Joseph,anna,Zilhan],我想要的结果是[Alice,anna,john,Joseph,Zilhan]。 - nisha
2个回答

15

您应该首先将每个字符串转换为小写,然后进行排序,如下所示:

array = ["john", "Alice", "Joseph", "anna", "Zilhan"]
array.sort_by!{ |e| e.downcase }
=> ["Alice", "anna", "john", "Joseph", "Zilhan"]

你刚才犯了一个错误。sort_by!会对数组对象本身进行排序。 - Rails Guy
是的,我知道,这取决于需求,你也可以使用:new_array = array.sort_by{ |e| e.downcase },但只有在旧数组需要进一步处理时才有用,否则创建另一个对象是无意义的。 - Aman Garg

4

请注意 - 名称可能包含特殊字符。这些字符会被排在末尾。

>> ["Ägidius", "john", "Alice", "Zilhan"].sort_by!{ |e| e.downcase }
=> ["Alice", "john", "Zilhan", "Ägidius"]

为了实现这个,你可以使用...
>> ["Ägidius", "john", "Alice", "Zilhan"].sort_by!{ |e| ActiveSupport::Inflector.transliterate(e.downcase) }
=> ["Ägidius", "Alice", "john", "Zilhan"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接