flat_map
, uniq
メソッド
最初はflat_mapだけの予定でしたが、コードの都合上2つ紹介します。
flat_map
メソッド
flatten
と map
を合わせたようなイメージ。selfが2次元以上の配列でもそれぞれのブロック内を評価して連結して(1段階ネストを浅くして)返してくれる。
uniq メソッド
その名の通り, selfから重複する値を取り除きます。
例
require 'byebug'
class Engineer
def initialize(name)
@name = name
@skills = []
end
def name
@name
end
def skills
@skills
end
def add(*skill)
@skills = skill
end
end
class Company
def initialize
@engineers = []
@technologies = []
end
def hire(*engineer)
@engineers = engineer
end
def engineers
@engineers.map(&:name)
end
def technologies
@engineers.flat_map(&:skills).uniq
end
end
a = Engineer.new('A')
a.add('Rails', 'Vue', 'Firebase', 'COBOL', 'WordPress', '筋トレ')
b = Engineer.new('B')
b.add('Rails', 'Qiita', 'English', 'バスケ')
company = Company.new
company.hire(a, b)
p company.technologies
=> ["Rails", "Vue", "Firebase", "COBOL", "WordPress", "筋トレ", "Rails", "Qiita", "English", "バスケ"]
p company.engineers
=> ["A", "B"]