maeshimaの日記

メモ書きです

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版 ライブラリ編
Dave Thomas Chad Fowler Andy Hunt
オーム社
売り上げランキング: 228524