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

时间:2013-07-23 01:01:15

标签: 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

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

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

wordlist.to_s.downcase.to_a.sort!

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

3 个答案:

答案 0 :(得分:90)

怎么样:

wordlist.sort_by { |word| word.downcase }

甚至更短:

wordlist.sort_by(&:downcase)

答案 1 :(得分:3)

通常,sort_by对于易于计算的键效率不高。更有效的比较是使用带有块的排序并替换默认比较运算符< =>用casecmp

wordlist.sort { |w1, w2| w1.casecmp(w2) }

有关提高效率的更多信息,请参阅sort_by方法的官方Ruby文档:http://www.ruby-doc.org/core-2.1.2/Enumerable.html#method-i-sort_by

答案 2 :(得分:0)

我在Ruby编码训练营中遇到了同样的问题。这对我有用:

puts "Type in a sentence."
sentence = gets.chomp.downcase
puts sentence.split(" ").sort