#16 Rubyで学ぶ辞書型(マップ)の基本
Rubyで名前と値の組み合わせを扱うには、「ハッシュ」と呼ばれる仕組みを使います。この記事では、Rubyにおける辞書に相当する使い方と、よく使う操作を解説します。
ハッシュを作ってみる
scores = { "太郎" => 90, "次郎" => 85 }
キーがシンボル(以前の記事で触れた:nameのような値)の場合は、より簡潔に書けます。
person = { name: "太郎", age: 20 }
値を取り出す
puts scores["太郎"]
puts person[:name]
値を追加・更新する
scores["三郎"] = 78 # 新しいキーを追加
scores["太郎"] = 95 # 既存のキーを更新
ハッシュに新しいキーを代入すれば追加、既にあるキーに代入すれば値の上書きになります。特別な操作は不要で、配列と同じ感覚で書けます。
存在しないキーへの対応
存在しないキーにアクセスするとnilが返ります。fetchを使うと、存在しない場合にエラーにするか、既定値を指定するかを選べます。
puts scores.fetch("三郎", 0)
puts scores.key?("太郎") # キーの有無だけを調べたい場合
全てのキーと値を順に処理する
scores.each do |name, score|
puts "#{name}: #{score}"
end
キーだけを取り出したい場合はscores.keys、値だけを取り出したい場合はscores.valuesが便利です。
Rubyならではの注意点
文字列のキー("name" => )とシンボルのキー(name: )は、見た目は似ていますが別のものとして扱われます。person["name"]とperson[:name]は異なる結果になるため、どちらのキーで作ったハッシュかを意識しましょう。一般的に、プログラム内部だけで使う固定的なキー(設定項目の名前など)にはシンボルを、外部から受け取ったデータ(JSONなど)をそのまま扱う場合には文字列を使うことが多く、目的に応じて使い分けるとよいでしょう。シンボルは同じ内容であれば必ず同じオブジェクトとして扱われるため、文字列よりわずかに処理が軽いという特徴もあります。
ハッシュを加工する
すべての値に処理をしたい場合はtransform_values、条件に合う要素だけ残したい場合はselectが使えます。
doubled = scores.transform_values { |v| v * 2 }
passed = scores.select { |name, score| score >= 80 }
まとめ
Rubyのハッシュ(辞書)は{}で作り、文字列またはシンボルをキーにできます。fetchで安全に値を取り出し、transform_valuesやselectで柔軟に加工できることも覚えておきましょう。2つのキーの書き方の違いにも注意が必要です。
本ページはプロモーションを含みます。
参考書籍(PR)
Rubyをもっと学びたい方には「プロを目指す人のためのRuby入門[改訂2版]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿