0

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

到目前为止,我已经编写了以下代码,但是当我添加关键字和值时,它只存储最后添加的值。在以下情况下,输出为“@word_list={"great"=>"remarkable"}>"。丢失了第一组值。

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

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
4

1 回答 1

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
于 2012-07-23T19:59:27.003 回答