ruby silver 勉強記録 (4日目)
・学習内容
1、find_allとselect
配列の検索。
find_all
メソッドは、条件に合う要素を探して集めます。ブロック引数itemに要素を入れながらブロックを繰り返し、ブロックの戻り値が真になったときの要素を集め、配列にして返します。
select
メソッドは、find_all
の別名です。
次の例は、1から30までの整数のうち7で割り切れるものを集めています。
2、mapとcollect
map
メソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します。collect
メソッドの別名です。
3、zipとfirst
zip
zip
メソッドは、配列の要素を引数の配列other_arrayの要素と組み合わせ、配列の配列を作成して返します。transpose
メソッドで[array,other_array, ...].transpose
としたときと同じく、行と列を入れ替えます。ただし、transpose
メソッドと違って足りない要素はnil
で埋められ、余分な要素は捨てられます。
first
first
メソッドは、配列の最初の要素を返します。配列が空のときはnil
を返します。
引数numに整数を指定すると、先頭からその数だけ要素を取り出して、配列にして返します。配列が空のときは空の配列を返します。
4、slice
slice
メソッドは、[]
メソッドの別名です。配列から引数で指定した位置の要素を取り出して返します。
引数の指定のしかたと戻り値については、[]
メソッドを参照してください。
5、eql?
eql?
メソッドは、ハッシュのキーが配列であるときに、「キーとして同じかどうか」を調べるために内部的に使われるメソッドです。
レシーバarrayと引数other_arrayの各要素を順に比較して、それぞれが同じであればtrue
、違いがあればfalse
を返します。要素の比較には、各要素のeql?
メソッドが使われます。
配列の比較には、普通はeql?
メソッドを使わずに、「配列の内容が同じかどうか」を調べるには==
メソッドを、「同じオブジェクトかどうか」を調べるにはequal?
メソッドを使ってください。
6、equal?
equal?
メソッドは、レシーバobjと引数other_objが同じオブジェクトならtrue
、別のオブジェクトならfalse
を返します。
Ruby 1.9 Ruby 1.9では、Object
クラスのequal?
メソッドはBasicObject
クラスに移されました(この変更は、Ruby 1.8用に書いたプログラムには特に影響はありません)。
Object
クラスでは==
とequal?
は同じメソッドの別名です。しかし、==
と違ってequal?
メソッドはサブクラスで上書きされず、常にオブジェクトの同一性を調べるのに使われます。自作のクラスでもequal?
を上書きしないでください。
次の例では、文字列を==
とequal?
で比較しています。String
クラスの==
は、文字列の内容が同じであればtrue
を返します。equal?
で比較すると、同じ内容でもオブジェクトが別ならfalse
になります。