以ruby数组显示所有大写中的所有其他元素以及全部小写的所有其他元素

时间:2015-07-30 01:27:14

标签: arrays ruby

我正在尝试编写一个添加输入单词数组的程序。用户完成输入数组中的最后一个元素后,将显示单词,其他每个单词都显示在所有大写字母中。换句话说,应该全是小写字母。有没有办法按字母顺序显示单词?这是我到目前为止所做的。

userWords = []

6.times do
  puts "Please enter a word:"
  userWords << gets.chomp
end

userWords.each do |word|
puts word
end

3 个答案:

答案 0 :(得分:3)

对数组进行排序

wordlist.sort_by{|word| word.downcase}

获取所有其他元素

wordlist.each_with_index {|val, index|
  if index.even?
    puts val.upcase
  else
    puts val.downcase
  end
}

答案 1 :(得分:1)

words = %w{ It was the best of times, it was the worst of times }
  #=> ["It", "was", "the", "best", "of", "times,", "it", "was",
  #    "the", "worst", "of", "times"] 

enum = [:upcase, :downcase].cycle
  #=> #<Enumerator: [:upcase, :downcase]:cycle> 
words.sort_by(&:downcase).each { |w| puts w.send(enum.next) }
BEST
it
IT
of
OF
the
THE
times
TIMES,
was
WAS
worst

答案 2 :(得分:-1)

上面的解决方案应该有效,但如果没有(我怀疑),你也可以试试这个类似的解决方案:

像你一样抓住用户输入后......

user_words.sort.each_with_index { |word, index| index.even? ? puts word.upcase : puts word.downcase } 

它做同样的事情,意味着它从第一个单词大写开始,然后是小写交替。

现在,如果您真的希望在以后修改数组并在以后重新使用它,您还可以执行以下操作:

new_array = user_words.sort.map.with_index(0) do |word, index| 
  word.upcase if index.even?
  word.downcase if index.odd?
end

puts new_array

PS:请注意:ruby中的约定是对于使用underscore_case的变量和方法,对于使用CamelCase的类