web-dev-qa-db-ja.com

RubyハッシュにKey、Value要素を挿入する

複数の値を持つことができる要素をハッシュリストに追加したいと思います。これが私のコードです。どうすれば解決できるかわかりません!

class dictionary

  def initialize(publisher)             
    @publisher=publisher
    @list=Hash.new()                    
  end

  def []=(key,value)
    @list << key unless @list.has_key?(key)
    @list[key] = value
  end

end


dic = Dictionary.new

dic["tall"] = ["long", "Word-2", "Word-3"]

p dic

よろしくお願いします。

よろしく、

ココ

12
user332550

これがあなたがやろうとしていることだと思います

class Dictionary
  def initialize()
    @data = Hash.new { |hash, key| hash[key] = [] }
  end
  def [](key)
    @data[key]
  end
  def []=(key,words)
    @data[key] += [words].flatten
    @data[key].uniq!
  end
end

d = Dictionary.new
d['tall'] = %w(long Word1 Word2)
d['something'] = %w(anything foo bar)
d['more'] = 'yes'

puts d.inspect
#=> #<Dictionary:0x42d33c @data={"tall"=>["long", "Word1", "Word2"], "something"=>["anything", "foo", "bar"], "more"=>["yes"]}>

puts d['tall'].inspect
#=> ["long", "Word1", "Word2"]

編集

Array#uniq!のおかげで、値の重複を回避できるようになりました。

d = Dictionary.new
d['foo'] = %w(bar baz bof)
d['foo'] = %w(bar zim)     # bar will not be added twice!

puts d.inspect
#<Dictionary:0x42d48c @data={"foo"=>["bar", "baz", "bof", "zim"]}>
11
maček

おそらく、2つのハッシュをマージしたいですか?

my_hash = { "key1"=> value1 }
another_hash = { "key2"=> value2 }
my_hash.merge(another_hash) # => { "key1"=> value1, "key2"=> value2 }
9
Vanuan