2011-01-18 12 views
16

辞書は基本的にハッシュテーブルですか?辞書=ハッシュですか?

また、ボーナス:Rubyコードの "Hash.new {0}"の最後の "{0}"は何ですか?

+11

"ボーナス:" - 私は何を勝つのですか?ステーキナイフ? –

+2

大きな自我??? –

+0

実際には、辞書にはキーがソートされています。ルビーのハッシュはありません – Mauricio

答えて

31

単語テーブル、辞書、およびマップは、しばしば(データ構造の文脈で)同義語として使用されます。ハッシュテーブル/ハッシュマップは、テーブル/辞書/マップの1種類です。

{0}は、その引数を無視して番号0を返すブロック(匿名関数)です。Hash.newに与えられたブロックは、キーがハッシュマップに見つからない場合にデフォルト値を生成するために呼び出されます。

I.e. h = Hash.new {0}を実行してh["key that does not exist"]を実行した場合、nilの代わりに0が返されます(これは{0}なしで取得できます)。この場合、デフォルト値が不変で、キーに依存しない場合は、Hash.newのブロック形式を使用する必要はありません。Hash.new(0)をデフォルト値として0に設定することができます。 Rubyで

7

辞書はちょうどキーにマップします。これを達成する方法はたくさんあります。ハッシュテーブルがその1つです。

16

ハッシュは{0}があれば、あなたが存在しなかったキーを呼び出すように評価されることになるブロックであり、それはデフォルト値のようなものだキー、valueストア

h = Hash.new 
h['one'] = 1 
h['one'] #=> 1 
h['two'] #=> nil 

です。

h = Hash.new {0} 
h['one'] #=> 0 
h = Hash.new {|hash,key| "#{key} has Nothing"} 
h['one'] #=> "one has Nothing" 
3

辞書は概念的なインターフェイスです。ハッシュテーブルは具体的な実装です。