Arrayその4
こうやって調べてみると知らないことやあやふやな理解だったところがたくさんあるなー
Array#product
配列の要素と引数の要素の組み合わせを作り、配列の配列を作って返す。本よりも下記のページの方がわかりやすい。
product (Array) - Rubyリファレンス
Array#delete
引数と等しい要素を全て配列から削除する。戻り値は、等しい要素が見つかればその要素、等しい要素が見つからない時はnilを返す。ブロックを渡すと、等しい要素が見つからない時にblockの戻り値を返す。
a = [ "a", "b", "b", "b", "c" ] a.delete("b") # => "b" a # => ["a", "c"] a.delete("z") # => nil a.delete("z") { "not found" } # => "not found"
Hash#deleteも大体同じ挙動。keyを引数で渡して戻り値がvalueになる部分だけ異なる。
h = {:a => "b", :c => "d"} h.delete(:a) => "b" h #=> {:c=>"d"} h.delete(:z) # => nil h.delete(:z) {"not found"} #=> "not found"
Array#delete_if, Array#reject!
blockを評価した結果が真になる要素を削除。削除後の配列を返す。Array#deleteとは戻り値が異なる(Array#deleteは削除した要素を返す)ところが分かりづらい><
a = [ "a", "b", "c" ] a.delete_if {|x| x >= "b" } # => ["a"]
Array#reject!は変更がない場合にnilを返す
a = [ "a", "b", "c" ] a.reject! {|x| x == "d" } # => nil # 変更がある場合はArray#delete_ifと同じ a.reject! {|x| x >= "b" } # => ["a"]
Array#delete_at
位置指定版のArray#delete。ブロックは受け付けない。
a = %w( ant bat cat dog ) a.delete_at(2) # => "cat" a # => ["ant", "bat", "dog"] a.delete_at(99) # => nil
Array#slice!
Array#delete_atの上位互換的なメソッド。第二引数に長さを指定可能。
a = %w(hoge fuga foo bar) a.slice!(1,2) # => ["fuga", "foo"] a # => ["hoge", "bar"] a.slice!(99) # => nil
Rangeオブジェクトも指定可能
a = %w(hoge fuga foo bar) a.slice!(1..2) a # => ["hoge", "bar"]
Array#shuffle
配列の中身をシャッフルして返す。1.8.7でも利用可能。
Array#shuffle!
配列の中身をシャッフルする。1.8.7でも利用可能。
参考
プログラミングRuby 第2版 ライブラリ編
posted with amazlet at 11.01.15