在Ruby程式語言中的#each
, #map
, #select
是在處理基本資料結構(像是hash, array)很好用的方法。但是這三種方法很常讓我們感到困惑,因為他們的使用方式很像,一個不小心用錯方法可能會讓結果跟我們原先設想的結果完全不一樣。本篇文章是用來解釋這三種方法的使用時機跟一些使用上要注意的地方!
使用這些Ruby的內建方法我們必須考慮兩個要點
- 方法的回傳值
- 方法對呼叫的物件是否有永久性的改變
- 方法如何處理區塊(block)的回傳值
用一些例子來說明這三方法的基礎用法
#each
這個方法是迭代陣列用的好方法,假設我們想要印出一個陣列裡面的每個值我們會這樣寫
在陣列中的每個元素都會被印出來一次。而這整個方法的回傳值會是你傳進去的陣列。
#map
這個方法是用來轉換(transform)陣列中每個元素的方法,用上面的陣列當例子,假設我們想要把陣列的每個元素都加一
#map
方法會把每個經過區塊裡面程式碼處理完的元素丟到一個新的陣列中,最後再回傳這個新的陣列回來。
#select
#select
方法則是會根據block的條件去篩選陣列裡面的元素到一個新的陣列裡面,用程式碼來看會比較清楚:
從程式碼裡面可以看到在區塊的值如果是truthy的話,元素便會被丟到回傳的新陣列裡面!
做個小總結:
#each
是用來迭代陣列裡面元素,可以對個別元素作想要的處理。#map
是用來將陣列的每個元素做轉換,新的陣列會根據block裡面的條件來將每個轉換完的元素丟到一個新陣列並回傳。#select
的功用則是依照block裡面的條件去選擇元素到一個新的陣列並回傳。