向新数组添加元素 Ruby
Adding elements to new array Ruby
所以最初我只是在玩 ole 'FizzBuzz' 挑战。对于那些可能不知道这个挑战是什么的人,请允许我解释一下。这个想法是打印出数字 1..100
如果数字可以被 3
整除,它打印 Fizz
而不是 3
;如果数字可以被 5
整除,则打印 Buzz
;如果数字可以被两者整除,它会打印 FizzBuzz
。这就是我完成挑战的方式:
def super_fizzbuzz(array)
array.each do |element|
if element % 15 == 0
puts 'FizzBuzz'
elsif element % 5 == 0
puts 'Buzz'
elsif element % 3 == 0
puts "Fizz"
else
puts element
end
end
end
这将按预期工作。我想要做的是拥有它,以便用户可以放入一个整数数组 super_fizzbuzz([3,10,15,19])
并拥有它 return 用适当的词替换数字的数组:[Fizz, Buzz, FizzBuzz, 19]
。但是,我似乎无法执行此操作。我在下面尝试了以下方法,但它只将第一个答案添加到数组中..
super_array = []
array.each do |element|
if element % 15 == 0
super_array[element] << 'FizzBuzz'
elsif element % 5 == 0
super_array << 'Buzz'
elsif element % 3 == 0
super_array << "Fizz"
else
super_array << element
end
return super_array
end
我的想法是创建一个新数组,如果该元素可以被一个或两个数字整除,则将其放入新数组中,如果不能,则将元素放入阵列。当我 运行 时会发生什么,它只是 return 一个带有 Fizz
的数组。如果我 运行 第一个代码并将数字放在一个数组中,它 returns:
Fizz
Buzz
FizzBuzz
19
[3, 10, 15, 19]
如有任何建议,我们将不胜感激。
return super_array
这条语句说 "stop everything you are doing and return this value right now"
因此第一次遍历数组,你会得到一个答案...然后点击这个结果,然后return这个数组结果而不继续遍历数组的其余部分。
可能你想要的只是 return 新的 "super_array" 在你遍历整个原始数组之后的值......所以我会把它移到循环之外,例如:
super_array = []
array.each do |element|
if element % 15 == 0
super_array[element] << 'FizzBuzz'
elsif element % 5 == 0
super_array << 'Buzz'
elsif element % 3 == 0
super_array << "Fizz"
else
super_array << element
end
end
return super_array # only return once through the whole array
由于提到@mu 太短,这是使用Enumerable
的map
方法的主要情况:
nums = [3, 15, 29, 42, 18, 63, 10]
def to_fizzbuzz
if self % 15 == 0
"FizzBuzz"
elsif self % 5 == 0
"Buzz"
elsif self % 3 == 0
"Fizz"
else
self
end
end
nums.map(&:to_fizzbuzz) #=> ["Fizz", "FizzBuzz", 29, "Fizz", "Fizz", "Buzz"]
所以最初我只是在玩 ole 'FizzBuzz' 挑战。对于那些可能不知道这个挑战是什么的人,请允许我解释一下。这个想法是打印出数字 1..100
如果数字可以被 3
整除,它打印 Fizz
而不是 3
;如果数字可以被 5
整除,则打印 Buzz
;如果数字可以被两者整除,它会打印 FizzBuzz
。这就是我完成挑战的方式:
def super_fizzbuzz(array)
array.each do |element|
if element % 15 == 0
puts 'FizzBuzz'
elsif element % 5 == 0
puts 'Buzz'
elsif element % 3 == 0
puts "Fizz"
else
puts element
end
end
end
这将按预期工作。我想要做的是拥有它,以便用户可以放入一个整数数组 super_fizzbuzz([3,10,15,19])
并拥有它 return 用适当的词替换数字的数组:[Fizz, Buzz, FizzBuzz, 19]
。但是,我似乎无法执行此操作。我在下面尝试了以下方法,但它只将第一个答案添加到数组中..
super_array = []
array.each do |element|
if element % 15 == 0
super_array[element] << 'FizzBuzz'
elsif element % 5 == 0
super_array << 'Buzz'
elsif element % 3 == 0
super_array << "Fizz"
else
super_array << element
end
return super_array
end
我的想法是创建一个新数组,如果该元素可以被一个或两个数字整除,则将其放入新数组中,如果不能,则将元素放入阵列。当我 运行 时会发生什么,它只是 return 一个带有 Fizz
的数组。如果我 运行 第一个代码并将数字放在一个数组中,它 returns:
Fizz
Buzz
FizzBuzz
19
[3, 10, 15, 19]
如有任何建议,我们将不胜感激。
return super_array
这条语句说 "stop everything you are doing and return this value right now"
因此第一次遍历数组,你会得到一个答案...然后点击这个结果,然后return这个数组结果而不继续遍历数组的其余部分。
可能你想要的只是 return 新的 "super_array" 在你遍历整个原始数组之后的值......所以我会把它移到循环之外,例如:
super_array = []
array.each do |element|
if element % 15 == 0
super_array[element] << 'FizzBuzz'
elsif element % 5 == 0
super_array << 'Buzz'
elsif element % 3 == 0
super_array << "Fizz"
else
super_array << element
end
end
return super_array # only return once through the whole array
由于提到@mu 太短,这是使用Enumerable
的map
方法的主要情况:
nums = [3, 15, 29, 42, 18, 63, 10]
def to_fizzbuzz
if self % 15 == 0
"FizzBuzz"
elsif self % 5 == 0
"Buzz"
elsif self % 3 == 0
"Fizz"
else
self
end
end
nums.map(&:to_fizzbuzz) #=> ["Fizz", "FizzBuzz", 29, "Fizz", "Fizz", "Buzz"]