在数组中的每个其他输入上应用`upcase` /`downcase`

时间:2015-08-30 00:43:44

标签: arrays ruby

在下面的代码中,如何让我的五个用户输入数组0,2,5和数组1,3小写的全部大写?其余的代码工作正常,只是找不到输出。

def f(x):
    for i in x:
        yield i

2 个答案:

答案 0 :(得分:2)

您基本上会询问如何根据特定项目的索引对数组应用不同的转换。使用Ruby,您可以将with_index链接到枚举器上,然后在循环遍历每个数组项时使用枚举器块内的索引。要将数组转换为新数组,您需要使用map

transformed_tests = tests.map.with_index do |test, index|
  if index.even?
    test.upcase
  else
    test.downcase
  end
end

或更紧凑的版本:

transformed_tests = tests.map.with_index do |test, index|
  test.send(index.even? ? :upcase : :downcase)
end

如果你想在收集输入时进行转换:

tests = 5.times.map do |index|
  input = gets.chomp
  input.send index.even? ? :upcase : :downcase
end

答案 1 :(得分:0)

你想要一个简单的方法吗?

n = 5

test = []
(n/2).times.with_object([]) do
  test << gets.chomp.upcase
  test << gets.chomp
end
test << gets.chomp.upcase if n.even?

更多Rubylike:

n.times.with_object([]) do |i,test| 
  str = gets.chomp
  str.upcase! if i.odd?
  test << str
end