2015-05-04 164 views
1

说,我已经计算出类似的身体质量指数,这是非常简单的,看起来像这样:红宝石:迭代计算

def body_mass_index(weight, height) 
    body_mass_index = weight/(height * height) 
    if body_mass_index < 18.5 
     puts "underweight" 
    elsif body_mass_index >= 18.5 && body_mass_index < 25.0 
     puts "normal" 
    elsif body_mass_index >= 25.0 && body_mass_index < 30.0 
     puts "overweight" 
    else 
     puts "obese" 
    end 
end 

现在说我要遍历身高和体重的名单,有可能在数组的形式。我如何在一些代码中组合这两个东西?我想说的是这样的:

[height, weight], [height, weight], height, weight].each do { |bmi| height, weight } 

但它不起作用。

+0

取代,就请编写代码的缩进方式liuzxc的解决方案上面提到的部分运行它有什么区别?提示:使用'ctrl + k'让该部分编写代码。以这种方式很难理解你的问题 –

+0

代码已被编辑。感谢您的建议 – jta

+0

您的意思是:[[身高,体重],[身高,体重],[身高,体重]。 body_mass_index(bmi [0],bmi [0])} – pangpang

回答

1

红宝石迭代,有两种风格:

[....].each do |i| 

end 

[...].each { |i| ...} 

他们是一样的,你可以使用任何人。

请试试:

[[height, weight], 
[height, weight], 
[height, weight], 
].each {|bmi| body_mass_index(bmi[1], bmi[0]) } 
+0

它的工作原理!我使用:.each do | bmi | body_mass_index(bmi [0],bmi [0]) end – jta

+0

我是一名初学者,我觉得我好像我几乎可以做这样的事情。我不知道你的解决方案为什么起作用。我能将这个例子推广到其他计算的东西,如温度转换,货币换算等吗? – jta

+0

这是一样的,你也可以使用'each {...}' – pangpang

1

现在你已经解决了这个问题的语法,你原来的缺失部分:

[[height, weight], [height, weight], [height, weight]].each do { |bmi| height, weight } 

的是,它不通过高度和体重值给body_mass_index方法。

liuzxc的溶液的这一部分

.each {|bmi| body_mass_index(bmi[1], bmi[0]) } 

索引中的每个的[身高,体重]阵列中的1(BMI [1]),并在0(BMI [0])和沿着所述传递值body_mass_index方法

要了解,你可以尝试用

.each {|bmi| puts "weight is #{bmi[1]} height is #{bmi[0]}"}