【问题标题】:Dictionary = Hash?字典 = 哈希?
【发布时间】:2011-06-10 19:04:55
【问题描述】:

字典基本上只是一个哈希表吗?

还有一个好处:在 Ruby 代码“Hash.new {0}”中,末尾的“{0}”是什么?

【问题讨论】:

  • “还有奖金:” - 我赢了什么?牛排刀?
  • 实际上,字典已经对他的键进行了排序。红宝石哈希不
  • @Mauricio:术语“字典”并不意味着排序。 python 和 .net 的字典类都没有排序。
  • @sepp2k:Ruby 的哈希键是否在 Ruby 1.9 中排序?
  • @Andrew:在 ruby​​ 1.9 中,哈希中的条目将保持其插入顺序。所以不,它们没有排序,但它们是有序的。

标签: ruby dictionary hash


【解决方案1】:

table、dictionary 和 map 这三个词经常作为同义词使用(在数据结构的上下文中)。哈希表/哈希映射是一种表/字典/映射。

{0} 是一个块(匿名函数),它忽略其参数并返回数字 0。当在哈希映射中找不到键时,调用给 Hash.new 的块以生成默认值。

即如果我先做h = Hash.new {0} 然后h["key that does not exist"],我会得到0,而不是nil(如果没有{0},我会得到)。注意,在这种情况下,默认值是不可变的,不依赖于键,你不需要使用Hash.new的块形式,你可以直接Hash.new(0)将0设置为默认值。

【讨论】:

    【解决方案2】:

    在 Ruby 中,哈希是键值存储

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

    {0} 是一个块,如果您在哪里调用一个不存在的键,它将被评估,它就像一个默认值。

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

    【讨论】:

      【解决方案3】:

      字典只是将一个映射到一个。有很多方法可以实现这一点;哈希表就是其中之一。

      【讨论】:

        【解决方案4】:

        字典是一个概念接口。哈希表是一个具体的实现。

        【讨论】:

          猜你喜欢
          • 2016-08-12
          • 2013-03-21
          • 2012-08-23
          • 2014-01-04
          • 1970-01-01
          • 1970-01-01
          • 2010-10-18
          • 2015-02-12
          • 1970-01-01
          相关资源
          最近更新 更多