我的txt文件包含几行,我想将每行添加到哈希,键为前2个单词,值为第3个单词...以下代码没有错误,但逻辑可能是错误的......最后一行是假设的打印哈希的所有键...但没有任何反应...请帮忙
def word_count(string)
count = string.count(' ')
return count
end
h = Hash.new
f = File.open('sheet.txt','r')
f.each_line do |line|
count = word_count(line)
if count == 3
a = line.split
h.merge(a[0]+a[1] => a[2])
end
end
puts h.keys
Hash#merge
不修改你调用它的哈希值,它返回合并的哈希:
合并(other_hash)→new_hash
返回包含other_hash的内容和hsh内容的新哈希。 [...]
注意返回一个新的哈希...部分。当你这样说:
h.merge(a[0]+a[1] => a[2])
您将构建的新值合并到h
的副本中,然后丢弃合并的哈希值;最终的结果是h
从来没有添加任何东西,并且在你完成所有工作后最终都是空的。
您想使用merge!
来修改哈希:
h.merge!(a[0]+a[1] => a[2])
或继续使用merge
但保存返回值:
h = h.merge(a[0]+a[1] => a[2])
或者,因为您只添加一个值,只需指定它:
h[a[0] + a[1]] = a[2]
如果要将每行的前三个单词添加到散列中,无论有多少单词,都可以删除if count == 3
行。或者,如果您想确保至少有三个单词,您可以将其更改为if count > 2
。
mu也是正确的。你想要h.merge!