如何按字母顺序排列数组?

use*_*684 42 ruby alphabetical-sort

我正在使用Chris Pine的学习编程,并且我很难接受相对简单的挑战,即以随机单词列表的形式获取用户输入,然后在数组中按字母顺序排列.关于这个挑战的问题之前已经提出过,但是我无法在SO上找到我的具体问题,所以如果它是重复的,我很抱歉.

puts "Here's a fun trick. Type as many words as you want (one per line) and 
I'll sort them in...ALPHABETICAL ORDER! Hold on to your hats!"
wordlist = Array.new
while (userInput = gets.chomp) != ''
   wordlist.push(userInput)
end
puts wordlist.sort
Run Code Online (Sandbox Code Playgroud)

虽然这样做,但我试图弄清楚如何在没有区分大小写的情况下按字母顺序排列数组.这很难绕过我的脑袋.我了解到,casecmp但这似乎是一种比较特定字符串的方法,而不是字符串数组.

到目前为止,我一直在尝试这样的事情:

wordlist.to_s.downcase.to_a.sort!
Run Code Online (Sandbox Code Playgroud)

除了看起来不好之外,它还有多种原因,包括Ruby 2.0不允许将字符串转换为数组.

pgu*_*rio 93

怎么样:

wordlist.sort_by { |word| word.downcase }
Run Code Online (Sandbox Code Playgroud)

甚至更短:

wordlist.sort_by(&:downcase)
Run Code Online (Sandbox Code Playgroud)

  • 对于像`map`,`sort_by`,`select`这样的方法,你在每个项目上运行一个块,如果你的块只是在每个项目上调用一个方法,那么就会有一些语法糖.它看起来像这样:`wordlist.sort_by(&:downcase)` (10认同)
  • 这是一个提示:你正在尝试对阵列做一些事情.所以google"ruby Array".第一个命中通常是Class:XXX(Ruby).这些是您搜索的课程的ruby文档.单击该链接,然后开始扫描左侧列出的方法.如果找不到符合要求的方法,则下一个要检查的位置也在左侧的"包含的模块"部分中.单击Enumerable,并查看其中的方法.在Enumerable中,您将找到sort_by(). (4认同)