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"]}