【Ruby3.x】Hash::transform_values!()メソッドの使い方
transform_values!メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
transform_values!メソッドは、呼び出し元のHashオブジェクトが持つ各値に対し、与えられたブロック内の処理を実行し、その結果で元の値を置き換えるメソッドです。このメソッドは、ハッシュのキーは変更せずに、値のみを一括で変換したい場合に特に有用です。
具体的には、ハッシュ内のすべてのキーと値のペアを順に処理し、各値がブロックに渡されます。ブロックが返す値が、対応するキーの新しい値として設定されます。メソッド名の末尾に付く!(バン)は、このメソッドが破壊的であることを示しており、呼び出し元のハッシュオブジェクト自体が変更されます。つまり、transform_values!を実行すると、元のハッシュの内容が上書きされ、その変更されたハッシュオブジェクトが返り値として得られます。
例えば、数値の集合を値として持つハッシュにおいて、すべての数値を2倍にしたり、文字列の集合で各文字列を大文字に変換したりするなど、既存のデータ構造内の値を一貫したルールで変更したい場合に活用できます。元のハッシュの内容を変更せずに新しいハッシュを生成したい場合は、類似のtransform_valuesメソッドを使用します。transform_values!メソッドは、既存のデータを効率的に一括変換し、その結果を元のデータ構造に直接反映させたい場合に選択される重要なメソッドです。
構文(syntax)
1hash = { a: 1, b: 2, c: 3 } 2hash.transform_values! { |value| value * 10 }
引数(parameters)
&block
- block: 各要素に対して実行されるブロック
戻り値(return)
Hash または Enumerator
Hash の各要素の値を、ブロックで渡されたブロック変数 (value) を使って変換した結果を新しい Hash で返します。ブロックの処理結果が nil でない場合は、元の Hash を破壊的に変更して変換後の Hash を返しますが、ブロックの処理結果がすべて nil であった場合は、変更せずに Enumerator を返します。