0

私のtxtファイルには数行が含まれており、キーを最初の2ワード、値を3ワードとしてハッシュに各行を追加したい...次のコードにはエラーはありませんが、ロジックが間違っている可能性があります...最後の行が想定されていますハッシュのすべてのキーを出力するには...しかし何も起こりません...plsヘルプ

    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)→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])

または、1つの値しか追加しないため、次のように割り当てます。

h[a[0] + a[1]] = a[2]
于 2012-09-01T05:08:25.977 に答える
0

単語数に関係なく、各行の最初の3単語をハッシュに追加する場合は、そのif count == 3行を削除できます。またはif count > 2、少なくとも3つの単語があることを確認したい場合は、に変更できます。

また、muは正しいです。あなたはh.mergeが欲しいでしょう!

于 2012-09-01T04:57:08.433 に答える