2012-07-23 42 views
0

我是一个初学者努力学习Ruby和我写的代码如下问题陈述: - 创建一个词典,其最初是空的。 - 向它添加条目..这个词应该是关键,意思应该是价值。 - 增加整个项目与关键字和定义(添加一个字的时候,就应该检查它是否已经存在) - 添加关键字没有定义(在这种情况下设置的定义是nil) - 可以检查一个给定的关键字是否存在 - 发现一个关键词条目并返回关键字+高清 - 从前缀查找到多个匹配,并返回整个条目(关键字+高清) - 也就是说,如果我们搜索“网络连接”,那么它应该返回与“网络连接”开头的所有条目 - 名单按字母顺序排列的关键字添加独特的键值散列和创建字典出它

到目前为止,我已经写了下面的代码,但是当我加入关键字和值,它是存储只添加了最后一个值。在以下情况下,输出为“@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

每次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