在ruby上使用每个数组乘以数组

时间:2015-07-09 18:52:29

标签: arrays ruby each

我一直坚持这个问题。我很感激任何帮助。

说明 "在odds数组上使用.each方法打印出数组中每个项目值的两倍。换句话说,将每个项目乘以2。

确保使用print而不是puts,因此输出显示在一行上。"

我的代码

odds = [1,3,5,7,9]

odds.each do |placeholder|
    odds *= 2
    print odds
end

5 个答案:

答案 0 :(得分:5)

odds = [1,3,5,7,9]
odds.each do |placeholder|
  odds *= 2
  print odds
end

您对此#each的使用是正确的,但请记住#each收到::Enumerable个对象,传入的块使用变量placeholder将值封装在在迭代的当前点::Array。因此,您需要使用placeholder来检索要加倍的值,而不是odds,因为odds仍然是::Array函数中的::Enumerable #each

这段代码可以写成两行,如下所示:

odds = [1,3,5,7,9]
odds.each {|placeholder| print placeholder * 2 }

严格地说,#map将是执行此操作的首选方法。

答案 1 :(得分:2)

odds.each { |x| print "#{x*2}" }

ruby​​-ish方式:

print odds.map {|x| x*2}.join(' ')

答案 2 :(得分:1)

您尝试在代码的每次迭代中将Array odds乘以2。对于数组中的每个项,do |placeholder|表示',给我单个元素并将其命名为placeholder'。

所以你需要使用placeholder *= 2

但是,由于您没有改变odds中的原始值,因此您可以只用print placeholder * 2缩短内部块。

此外,虽然问题可能在于使用:each,但:map对您正在做的事情更为规范。使用map可以让你将每个元素加倍:

odds.map{ |i| i*2 }

答案 3 :(得分:0)

odds是你的数组。 placeholder表示数组中的值。如果没有明确地为您提供答案,您想要做的是将值乘以2,而不是数组本身。

答案 4 :(得分:0)

在这里,我成功完成了

odds = [1,3,5,7,9]
odds.each do |x|
    x *= 2
    print x
end