如何添加到Ruby中现有的散列

关于在Ruby中添加一个key => value对到现有的已填充散列,我正在通过Apress的“Beginning Ruby”工作,刚刚完成了散列章节。

我试图find最简单的方法来实现与散列相同的结果,就像这样做与数组:

 x = [1, 2, 3, 4] x << 5 px 

如果你有一个散列,你可以通过键引用它来添加项目:

 hash = { } hash[:a] = 'a' hash[:a] # => 'a' 

在这里,像[ ]创build一个空数组, { }将创build一个空的散列。

数组按特定顺序具有零个或多个元素,其中元素可能会重复。 散列具有零个或多个由键组织的元素,其中键可以不被复制,但是存储在这些位置的值可以是。

ruby中的哈希是非常灵活的,可以有几乎任何types的键你可以扔在它。 这使它与您在其他语言中find的字典结构不同。

记住一个哈希键的特定性质通常很重要:

 hash = { :a => 'a' } # Fetch with Symbol :a finds the right value hash[:a] # => 'a' # Fetch with the String 'a' finds nothing hash['a'] # => nil # Assignment with the key :b adds a new entry hash[:b] = 'Bee' # This is then available immediately hash[:b] # => "Bee" # The hash now contains both keys hash # => { :a => 'a', :b => 'Bee' } 

Ruby on Rails通过提供HashWithIndifferentAccess来混淆这一点,它将在Symbol和String方法之间自由转换。

你也可以索引任何东西,包括类,数字或其他哈希。

 hash = { Object => true, Hash => false } hash[Object] # => true hash[Hash] # => false hash[Array] # => nil 

哈希可以转换为数组,反之亦然:

 # Like many things, Hash supports .to_a { :a => 'a' }.to_a # => [[:a, "a"]] # Hash also has a handy Hash[] method to create new hashes from arrays Hash[[[:a, "a"]]] # => {:a=>"a"} 

当把事物“插入”到一个哈希中时,你可以一次一个地执行它,或者使用merge方法来合并哈希值:

 { :a => 'a' }.merge(:b => 'b') # {:a=>'a',:b=>'b'} 

请注意,这不会改变原始散列,而是返回一个新散列。 如果你想把一个哈希合并成另一个哈希,你可以使用merge! 方法:

 hash = { :a => 'a' } # Returns the result of hash combined with a new hash, but does not alter # the original hash. hash.merge(:b => 'b') # => {:a=>'a',:b=>'b'} # Nothing has been altered in the original hash # => {:a=>'a'} # Combine the two hashes and store the result in the original hash.merge!(:b => 'b') # => {:a=>'a',:b=>'b'} # Hash has now been altered hash # => {:a=>'a',:b=>'b'} 

像String和Array上的很多方法一样, 表示这是一个就地操作。

 my_hash = {:a => 5} my_hash[:key] = "value" 

如果你想添加多个:

 hash = {:a => 1, :b => 2} hash.merge! :c => 3, :d => 4 p hash 
 x = {:ca => "Canada", :us => "United States"} x[:de] = "Germany" px 
 hash {} hash[:a] = 'a' hash[:b] = 'b' hash = {:a => 'a' , :b = > b} 

您可能会从用户input中获得您的键和值,因此您可以使用Ruby .to_sym可以将string转换为符号,而.to_i会将string转换为整数。
例如:

 movies ={} movie = gets.chomp rating = gets.chomp movies[movie.to_sym] = rating.to_int # movie will convert to a symbol as a key in our hash, and # rating will be an integer as a value.