我的txt文件包含几行,我想将每行添加到哈希中,键为前2个单词,值为第3个单词...以下代码没有错误,但逻辑可能有误...最后line应该打印哈希的所有键...但没有任何反应......请帮助
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
答案 0 :(得分:2)
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]
答案 1 :(得分:0)
如果要将每行的前三个单词添加到散列中,无论有多少单词,都可以删除if count == 3
行。或者,如果您想确保至少有三个单词,则可以将其更改为if count > 2
。
另外,mu是正确的。你会想要h.merge!