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()より簡単で書きやすくて好きなので、こちらで初期値を設定する方法を教えてください。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2007/11/20 01:31:47
  • 終了:2007/11/20 20:28:59

回答(1件)

id:quintia No.1

quintia回答回数561ベストアンサー獲得回数702007/11/20 07:32:13

ポイント60pt

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

とかでしょうかね。

id:garyo

ありがとうございます。

無理でしょうか。

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

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

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

a.default = 0

はいいですね。

2007/11/20 09:49:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません