ruby的hash学习笔记例: 将字符串文本中的单词存放在map中
text = 'The rain in Spain falls mainly in the plain.'
first = Hash.new []
second = Hash.new {|hash,key| hash[key] = []}
text.split(/\W+/).each do |word|
p "word: #{word}"
p first[word[0, 1].downcase].object_id
first[word[0, 1].downcase] << word
p first[word[0, 1].downcase]
end
p first
"word: The" 46999283958220 这里是关键。每次都是引用同一个数组。 ["The"] "word: rain" 46999283958220 ["The", "rain"] "word: in" 46999283958220 ["The", "rain", "in"] "word: Spain" 46999283958220 ["The", "rain", "in", "Spain"] "word: falls" 46999283958220 ["The", "rain", "in", "Spain", "falls"] "word: mainly" 46999283958220 ["The", "rain", "in", "Spain", "falls", "mainly"] "word: in" 46999283958220 ["The", "rain", "in", "Spain", "falls", "mainly", "in"] "word: the" 46999283958220 ["The", "rain", "in", "Spain", "falls", "mainly", "in", "the"] "word: plain" 46999283958220 ["The", "rain", "in", "Spain", "falls", "mainly", "in", "the", "plain"] {}
text.split(/\W+/).each do |word|
p "word: #{word}"
p second[word[0, 1].downcase].object_id
second[word[0, 1].downcase] << word
p second[word[0, 1].downcase]
end
p second
"word: The" 46999283949940 ["The"] "word: rain" 46999283924940 这里按照key取,不同的key对应不同的数组 ["rain"] "word: in" 46999283924440 ["in"] "word: Spain" 46999283923920 ["Spain"] "word: falls" 46999283923420 ["falls"] "word: mainly" 46999283922920 ["mainly"] "word: in" 46999283924440 ["in", "in"] "word: the" 46999283949940 ["The", "the"] "word: plain" 46999283921440 ["plain"] {"t"=>["The", "the"], "r"=>["rain"], "i"=>["in", "in"], "s"=>["Spain"], "f"=>["falls"], "m"=>["mainly"], "p"=>["plain"]}