2015-05-04 142 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]}"}