Ruby map, collect and select

做爲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

相關文章
相關標籤/搜索