将唯一键值添加到哈希并从中创建字典

时间:2012-07-23 19:56:07

标签: ruby ruby-on-rails-3.1 hash ruby-1.9.3

我是初学者,正在尝试学习ruby,我正在编写以下问题陈述的代码:   - 创建一个最初为空的字典。   - 添加条目..单词应该是键,含义应该是值。   - 添加包含关键字和定义的整个条目(添加单词时,应检查它是否已存在)   - 添加没有定义的关键字(在这种情况下,将定义设置为nil)   - 可以检查给定的关键字是否存在   - 查找关键字条目并返回关键字+定义   - 从前缀中查找多个匹配并返回整个条目(关键字+定义) - 即如果我们搜索“fi”,则它应返回以“fi”开头的所有条目   - 按字母顺序列出关键字

到目前为止,我已经编写了以下代码,但是当我添加关键字和值时,它只存储最后添加的值。在下面的例子中,输出是“@word_list = {”great“=>”非常“}>”。第一组价值观丢失了。

我不知道如何解决这个问题。任何帮助都会很棒。谢谢!

class Dictionary

  def word_list
     @word_list = Hash.new
  end

  def add new_entry
    case new_entry
     when Hash
        word_list.merge!(new_entry)
     when String
         word_list[new_entry] = nil
    end
   end


d1 = Dictionary.new
d1.add ({"fish" => "aquatic animal", "fiend" => "bad person"})
d1.add ({"great" => "remarkable"})

puts d1.inspect

1 个答案:

答案 0 :(得分:1)

每次调用word_list时,您都会创建一个新的哈希,用空哈希替换@word_list中的任何内容。

def word_list
  @word_list = Hash.new
end

请尝试使用||=,当Hash.new完成时,没有理由在{}使用a ||= b。当然,a = a || b表示def word_list @word_list ||= {} end 表示@word_list,如果该值尚未设置,则仅使用该值。

initialize

或许最好不要懒惰地初始化class Dictionary def initialize @word_list = {} end def word_list @word_list end # other methods... end ,因为没有单词列表的字典根本就没有字典。而是在{{1}}方法中创建内部哈希,以便每个实例始终都有一个。

{{1}}