如何添加到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.