Rubyリファレンス: Home

rehash (Hash)

Edit   History

標準クラス・モジュール > Hash > rehash

hash.rehash

rehashメソッドは、ハッシュの各キーのハッシュ値を再計算します。

配列など変更可能なオブジェクトがキーになっている場合は、キーのオブジェクトを変更するとキーのハッシュ値が変わってしまい、キーに対応する値にアクセスできなくなります。そうしたときはrehashメソッドでハッシュが持っているハッシュ値を再計算すると、値にアクセスできるようになります。

arr = [1, 2]
numbers = { arr => 3, 4 => 5 }
puts "キー[1, 2]の値: " + numbers[[1, 2]].inspect
 
arr[0] = 7      # キーのオブジェクトを変更
puts "キー[7, 2]の値: " + numbers[[7, 2]].inspect
 
numbers.rehash  # ハッシュ値再計算
puts "キー[7, 2]の値: " + numbers[[7, 2]].inspect
キー[1, 2]の値: 3
キー[7, 2]の値: nil
キー[7, 2]の値: 3