做爲ruby的新手,我常常對Array的enumerators的三種方法感到困惑: map, collect 和 select。讓咱們經過一些例子來解決這個困惑。數組
list = (1..10).to_a p list p list.collect { |i| i >= 3 && i <= 7 } p list.map { |i| i >= 3 && i <= 7 } p list.select { |i| i >= 3 && i <= 7 }
結果ruby
全部的方法都有類似之處就是都用了一個block 參數,map和collect方法都返回了一個數組中的item經過計算返回的值,而select方法則返回了經過迭代數組中的item計算出的結果爲true的值。spa
這個例子還不能徹底地解決區分map 和 collect,咱們嘗試另一個例子code
class Person attr_accessor :name, :surname, :age def initialize(name,surname,age) @name, @surname, @age = name, surname, age end end people = [] people << Person.new("Daniel","Craig",43) people << Person.new("Pierce","Brosnan",58) people << Person.new("Sean","Connery",81) p people.map { |p| p.surname }
若是使用p people.collect { |p| p.surname}, 一樣也會獲得同樣的結果,事實上,你去查看ruby 文檔會發現map 和 collect都被當作rb_ary_collect 方法執行。
blog