人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Rubyでハッシュを使う時に
a={}
a["new"]+=1
とやるとa["new"]が最初はnilを返すのでエラーになるので
x="new"
a[x]=(a[x]?a[x]+=1:1)と書いていましたが

ハッシュの初期値を与えると回避できるというのを知りました。
a=Hash.new(0)
p a["new"]+=1

この「a=Hash.new(0)」というのを「a={}」のような{}を使って書く方法があれば
教えてください。


a={} の方が a=Hash.new()より簡単で書きやすくて好きなので、こちらで初期値を設定する方法を教えてください。

●質問者: garyo
●カテゴリ:インターネット ウェブ制作
✍キーワード:H.N nil Ruby エラー ハッシュ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● quintia
●60ポイント

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%A5%EA%A...

Rubyリファレンスの「リテラル」のページに相当する書き方が見あたらないので、無理なのではないかと。


個人的には、Hashに格納されていないキーに対する初期値を変える(nil以外にする)ことは、

あまり馴染みがないので、

a={}
a.default = 0 #keyに対応するvalueが無いときの初期値を0にする
:
:
:
p a["new"]+=1

の方が後から見た時には判りやすいように思います。


(以下余談です)

あと、書き方として思いつくのは、

a["new"] ||= 0 #a["new"] = a["new"] ? 0 と同じ。nilなら0にする
a["new"] += 1

とか、

a["new"] = (a["new"] || 0) + 1

とかでしょうかね。

◎質問者からの返答

ありがとうございます。

無理でしょうか。

最初ハッシュを使ったときに

単語カウントとかする時に初めて使う(初期値)時nilでエラーになるので

初回と2回目以降をif文でわけて書いていたので何か奇麗でなくて嫌でした。

a.default = 0

はいいですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ