讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Ruby Silver 試験】hash.clear, Array.product, Array.transcope, Enum.partition

Hash.clear

【Rubyリファレンス】:Hash.clear

clearメソッドは、ハッシュのキーと値をすべて削除してハッシュを空にする。

h = {a: 100, b: 200}
h.clear
p h

Array.product, Array.transpose

これを実行したらどうなるか。

arr = [1,2].product([3,4]).transpose
p arr

答え
[[1, 1, 2, 2], [3, 4, 3, 4]]

一個づつ分解してみていく

Array.product

【Rubyリファレンス】:array.product

productメソッドは、配列の要素と引数の配列の要素の組合せた配列を作る。

では動きを確認する。

arr = [1,2].product([3,4])

結果
[[1, 3], [1, 4], [2, 3], [2, 4]]

Array.transpose

【Rubyリファレンス】:array.transpose

transposeメソッドは、配列の配列を行と列からなるデータと見立てて、行と列を入れ替えた配列の配列を作成する。 ただし、配列の大きさが異なる場合はエラーとなる。

では動きを確認してみる。

arr = [1,2].product([3,4]).transpose

ここでは[[1, 3], [1, 4], [2, 3], [2, 4]]を行列データを見立てるので

結果
[[1, 1, 2, 2], [3, 4, 3, 4]]

個人的にはこういうのはPythonでやりたい気がする、、、

enum.partition

【Rubyリファレンス】:enum.partition
partitionメソッドは、要素を2つの配列に分ける。
ブロック引数itemに要素を入れながらブロックを繰り返し実行し、ブロックの戻り値が真になった要素と、偽になった要素をそれぞれ集めて格納する。

例えばこの場合

a,b = (1..5).partition(&:odd?)
p ("a is #{a}")
p ("b is #{b}")

結果
"a is [1, 3, 5]"
"b is [2, 4]"

上記、真の場合のみの配列を作成したい場合は

a, = (1..5).partition(&:odd?) 
## bを削除、この時「,」はそのままにする。
p ("a is #{a}")

結果
"a is [1, 3, 5]"

今回はここまで。

当ブログではRuby Silverの受験に向けてインプットした内容を記事にメモしているのでRuby Silverを受験される方はこちらものぞいてみてくださいね。