Ruby 交替使用大小写

Ruby 交替使用大小写,ruby,Ruby,我对Ruby非常陌生,我想知道如何自动生成一个空数组,以按字母顺序显示输入的数据,并在大写和小写之间交替显示每个条目。我在这个网站上看到过类似的帖子,描述了如何实现这一点,但似乎无法实现 下面是我的代码,这里使用的是示例: 目前,我的代码首先交替使用大写和小写,然后按字母顺序排序(创建两个列表)。我想要的只是一个按字母顺序排列的列表,并交替使用大小写。我希望这是有意义的,谢谢你的时间 puts "Welcome to the word list!" words = [] 5.times do

我对Ruby非常陌生,我想知道如何自动生成一个空数组,以按字母顺序显示输入的数据,并在大写和小写之间交替显示每个条目。我在这个网站上看到过类似的帖子,描述了如何实现这一点,但似乎无法实现

下面是我的代码,这里使用的是示例:

目前,我的代码首先交替使用大写和小写,然后按字母顺序排序(创建两个列表)。我想要的只是一个按字母顺序排列的列表,并交替使用大小写。我希望这是有意义的,谢谢你的时间

puts "Welcome to the word list!"

words = []

5.times do
    puts "Please enter a word:"
    words << gets.chomp
end    

words.each_with_index do |word, index|
    if index.even?
      puts word.upcase
    else
      puts word.downcase
    end
end

puts "Here are your words:"
puts words.sort
显示“欢迎来到单词列表!”
单词=[]
5.5倍
放入“请输入一个单词:”

单词首先,在这两种情况下,你会得到不同的结果:

 1. sort the words first and then apply your alternate upcase/downcase logic.
 2. apply your alternate upcase/downcase logic first, then sort the words.
因为如果先对单词进行排序,原始输入数组中单词的索引将发生更改。因此,当您根据输入数组中单词的索引执行此操作时,它将对您的upcase/downcase逻辑产生影响

因此,您是要先对单词进行排序,还是要在最后对单词进行排序,这取决于您最初的需求

这是第一种方法:

puts "Welcome to the word list!"

words = []
results = []

5.times do
  puts "Please enter a word:"
  words << gets.chomp
end

words.sort.each_with_index do |word, index| # sort the input words first, then loop through
  # accumulate the results in the results array
  if index.even?
    results << word.upcase
  else
    results << word.downcase
  end
end

puts "Here are your resulting words: "
puts results
显示“欢迎来到单词列表!”
单词=[]
结果=[]
5.5倍
放入“请输入一个单词:”

单词我会这样做:

enum = [:upcase, :downcase].cycle
  #<Enumerator: [:upcase, :downcase]:cycle>

5.times.with_object([]) do |_,words|
  puts "Please enter a word:"
  words << gets.chomp.send(enum.next)
end
由于您是Ruby新手,如果您理解我在第一次阅读时所做的事情,我会感到惊讶。不过,如果你把它拆了,就没那么糟糕了。如果你一直努力学习直到理解它,我保证你对语言的理解会有一个很大的飞跃

如果检查文档(返回类
枚举器的实例),您将发现:

enum.next #=> :upcase
enum.next #=> :downcase
enum.next #=> :upcase
enum.next #=> :downcase
...

将方法分派给接收者是的工作。无论何时调用方法(比如说
[1,2])非常感谢您的回答,这非常有效。很抱歉问另一个问题,我如何获得“结果词”要列出不带括号和引号的内容并将其放在各行中?谢谢!@garfield_digital只需做:
放入结果
而不是
放入结果。检查
欢迎:)您应该接受您最喜欢的答案,并找到最适合您的问题的答案。详细信息请参见本帖:非常感谢您提供的详细答案,这是我的全部想法,但非常有帮助,并且让我大开眼界。我要花时间研究这个,谢谢!
enum.next #=> :upcase
enum.next #=> :downcase
enum.next #=> :upcase
enum.next #=> :downcase
...
words = []
5.times do
  puts "Please enter a word:"
  words << gets.chomp.send(enum.next)
end
words