2014-10-28 38 views
1
people_names = ["Mike", "Tom", "Alison", "Jerry", "Cam"] 

people_caps = people_names.each.upcase 


# people_caps => ['MIKE', 'TOM', 'ALISON', 'JERRY', 'CAM'] 

我想將數組people_names中的每個項目都更改爲全部大寫。 我可以像這樣做:Ruby Array方法array.each.upcase

people_caps = people_names.each {|name| name.upcase!} 

,但它也只是改變了pe​​ople_names所有的帽子,但只有people_caps應該包含全大寫的名字,people_names應保持不變。

回答

4

您的代碼也會更改people_names,因爲您在該數組中的所有(each)元素上調用upcase!

如果你只是想返回,而不是改變舊的使用一個新的數組:

people_caps = people_names.map { |name| name.upcase } 

或更短:

people_caps = people_names.map(&:upcase) 
1
people_caps = people_names.map(&:upcase) 
0

people_caps = people_names.each {|name| name.upcase!}

的!將覆蓋原始的people_names。

不要使用!

你應該明白兩者之間有什麼區別!沒有!