在下面的代码中,如何让我的五个用户输入数组0,2,5和数组1,3小写的全部大写?其余的代码工作正常,只是找不到输出。
def f(x):
for i in x:
yield i
答案 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