Rubyは高機能な配列関数が多くてどこまで覚えるか悩ましいですが、とりあえず1ヶ月Railsで開発して使ったものは今後もよく使うだろうということでメモしておきます。
map
配列の各要素に対して何らかの処理をした結果の新しい配列がほしい場合に使うメソッドです。 docs.ruby-lang.org
例えば、以下のようにTagオブジェクトのリストからnameフィールドのリストを取得したい場合などに使えます。
class Tag attr_reader :id, :name def initialize(id, name) @id = id @name = name end end tags = [Tag.new(1, "タグ1"), Tag.new(2, "タグ2")] puts tags.map(&:name).join(", ") # タグ1, タグ2
include?
配列に要素が含まれるかを判定するメソッドです。
例えば画面にチェックボックスを表示する際に、チェック済みのチェックボックスはcheckedの状態で表示したい場合などに使えます。
class CheckBox attr_accessor :checked attr_reader :id, :name def initialize(id, name, checked) @id = id @name = name @checked = checked end def display if @checked puts "[x] #{@name}" else puts "[ ] #{@name}" end end end check_boxes = [ CheckBox.new(1, "インド", false), CheckBox.new(2, "ネパール", false), CheckBox.new(3, "スリランカ", false) ] checked_ids = [1, 3] check_boxes.each do |check_box| check_box.checked = true if checked_ids.include?(check_box.id) end check_boxes.each(&:display)
実行結果
$ ruby index.rb [x] インド [] ネパール [x] スリランカ
Railsではhas_manyの関連先のidリストをauthor.book_idsのように取得できるので、相性がいいです。
select と reject
selectは配列の要素を評価してtrueのものだけにフィルタした新しい配列を返します。
ids = ["1", "", "3"] pp ids.select { |id| !id.empty? } # ["1", "3"]
reject はその逆です。
ids = ["1", "", "3"] pp ids.reject { |id| id.empty? } # ["1", "3"]
リクエストパラメータを配列で受け取った時のサニタイズ処理などに使えます。
Railsでは独自拡張のblank?とpresent?が合わせて使えます。