0

我的 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
4

2 回答 2

2

Hash#merge不会修改您调用它的哈希值,它会返回合并的哈希值:

合并(其他哈希)→新哈希

返回包含other_hash内容和hsh内容的新哈希。[...]

注意Returns a new hash...部分。当你这样说时:

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]
于 2012-09-01T05:08:25.977 回答
0

如果要将每行的前三个单词添加到哈希中,无论有多少单词,都可以删除该if count == 3行。if count > 2或者,如果您想确保至少有三个单词,您可以将其更改为。

此外,穆是正确的。你会想要 h.merge!

于 2012-09-01T04:57:08.433 回答