按字母顺序返回条目的Ruby适用于除第一个条目外的所有条目



是这样的

word = 'word'
words = []

puts 'enter some words, man. ill tell em to you in alphabetical order.'
puts 'when your're done, just press enter without typing anything before.'
puts ''
word = gets.chomp
        while word != ''
        word = gets.chomp
        list = list.push word
    end
    puts ''
    puts 'Your alphabetically ordered words are:'
    puts list.sort
    puts ''

同样,除了我提交给它的第一个单词之外,这是有效的。如有任何提示或帮助,不胜感激。

现在可以运行了

word = gets.chomp
while word != ''
  list = list.push word
  word = gets.chomp
end

在您的情况下,在将第一个word推入list之前(当您刚刚进入while循环时),您再次调用Kernel#gets分配给word。这就是为什么您丢失了第一个单词,并且从第二个开始将单词推入数组。

与函数式方法比较:

sorted_words =
  (1..Float::INFINITY)
    .lazy
    .map { gets.chomp }
    .take_while { |word| !word.empty? }
    .sort

如果您意识到赋值返回的是赋值,则可以使此代码更简洁。

list = []
until (word = gets.chomp).empty? do
    list << word
end

这是另一种重写程序的方法,也许用一种更直观、更有表现力的方式:

word = 'word'
list = []
puts 'enter some words, man. ill tell em to you in alphabetical order.'
puts 'when your're done, just press enter without typing anything before.'
puts ''
keep_going = true
while keep_going
  word = gets.chomp
  keep_going = false if word.empty?
  list = list.push word if keep_going
end
puts ''
puts 'Your alphabetically ordered words are:'
puts list.sort
puts ''

相关内容

最新更新