0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ruby]別のハッシュの値とキーを参照して、ハッシュに値を代入する方法

Last updated at Posted at 2021-01-14

大したネタじゃないが、自分は最初結構こまったので。

例えば次のようなハッシュがあったとする。

key value
太郎 宮城
次郎 青森
花子 沖縄

これは単純にhash = {"太郎" => "宮城", "次郎" => "青森","花子" => "沖縄"}みたいに書けばいいだけだが、それと別にこんなハッシュもあるとする。

key value
宮城 400円
青森 700円
沖縄 1200円

各県送料がこのくらいなのかはよくわからないのでデタラメな数字なのは勘弁して欲しいが、まぁ各地の送料みたいな表のようなイメージだ。これもref = {"宮城" => 400 ,"青森" => 700 ,"沖縄" => 1200}みたいにかくとする。

これで名前と送料の組のハッシュに変換したいみたいな場合の記述が案外調べても出てこなかったので、備忘録的に。

##コメントで頂いた方法

自分は一旦二次元配列になおしてもう一回ハッシュに戻すなんて面倒臭いことをやっていたが、ハッシュの値をすべて直接変更できるメソッドであるtransform_valuesを使ったほうが全然よかった。お教え頂きありがとうございます。

list = hash.transform_values{ |x| ref[x] }

p list
# { "太郎" => 400 , "次郎" => 700, "花子" => 1200 }

もしくは

hash.transform_values(&ref)

でもいいらしい。スマート!

##自分でやってた方法

list = hash.to_a.each{|x| x[1] = ref[x[1]]}.to_h 

p list
# { "太郎" => 400 , "次郎" => 700, "花子" => 1200 }

順番に処理したいので、一旦to_aで二次元配列になおして、順番に二番目(x[1])に、refのハッシュのバリューを入れていって、最後はハッシュになおすだけ。

シゴク単純だが、意外とこれ迷うんだよね。ていうかもっと簡単な方法あったりしそうな気がする(ありました)。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?