Ruby on rails ruby按字母顺序对数组进行排序,唯一并循环5次

Ruby on rails ruby按字母顺序对数组进行排序,唯一并循环5次,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,view-helpers,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,View Helpers,我正在从数组中检索元素: - member_results.each do |member| = member 它返回如下内容: ["John", "Jason", "Andy", "Zee", "Sandy", "Randy", "Grisham"] 我需要按字母顺序对数组排序,只从数组中检索前五个唯一的元素。有人能给我推荐一个有效的方法来写一个助手吗 编辑: 根据squiguy提供的答案,我做了以下工作: member_results.map(&:downcase

我正在从数组中检索元素:

  - member_results.each do |member|
      = member
它返回如下内容:

["John", "Jason", "Andy", "Zee", "Sandy", "Randy", "Grisham"]
我需要按字母顺序对数组排序,只从数组中检索前五个唯一的元素。有人能给我推荐一个有效的方法来写一个助手吗

编辑: 根据squiguy提供的答案,我做了以下工作:

member_results.map(&:downcase).sort.uniq.take(5)
这解决了我的大部分问题。 但是,当我显示这些结果时,我需要将它们恢复到原始格式

For example the result could be grisHam, aNdy etc.

要获取已排序的唯一数组,请执行以下操作:

member_results.sort.uniq
要在前5个唯一成员上循环,请执行以下操作:

member_results.sort.uniq[0..4].each do |m|
 ... 
end
或:

或:



我的企业将是:

member_results.sort_by(&:downcase).uniq.take(5)
如果对两个数组使用union运算符,则不需要
uniq

(a1 | a2).sort.take(5)

我试过了,但没用。可能是因为我的数组是两个数组的连接?member_results=results1 | results2什么不起作用?连接不应该影响任何事情,除非您在调用后进行连接。@Tilo必须这样做。秩序很重要,似乎你已经指出了这一点。他没有在他的问题中贴出来,所以没有办法知道。我知道问题出在哪里了。有些名字是小写的,所以它没有对它们进行排序。@newbie哦,一个简单的
.map(&:downcase)
应该可以解决这个问题,如果需要的话。请参阅下面的答案。确保对(result1 | result2)使用parantises。sort.uniq。首先(5)你希望从中得到什么:
[“约翰”、“杰森”、“安迪”、“泽伊”、“桑迪”、“兰迪”、“格里沙姆”、“约翰”]
如果你想保留原来的案例,那么你会让约翰两次,否则你就必须选择一次。你不需要最后一次使用uniq,|会处理的,@ShawnBalestracci不一定。他希望最终结果也是唯一的。每个数组中可以有多个副本,例如,如果您选择用户记录的名字。。。OP要求获得独特的结果
(result1 | result2).sort.uniq.first(5)
member_results.sort_by(&:downcase).uniq.take(5)
(a1 | a2).sort.take(5)