1

我想计算一行文本中的所有单词。我正在使用地图来执行此操作,其中键表示单词,值表示整数。我不知道如何告诉 Ruby 所有的值都是整数。它迫使我在我的迭代器块中放置一个丑陋的分支:

# in the constructor
@individual_words = {}

def count_words_from( text_line )
  text_line.each do |line|
    line.scan(/\p{Word}+/)
    .reject{ |string| string =~ /\d/ }
    .each do |word|
      if @individual_words[ word ] == nil then   # This is ugly
        @individual_words[ word ] = 1            # This is ugly as well
      else
        @individual_words[ word ] += 1
      end
    end
  end
end

简单来说,我想做这样的 Java 行:

Map<String, Integer> individualWords;

以避免必须将单词第一次出现的类型从 更改NilInteger

4

2 回答 2

11

您可以像这样在哈希中设置默认值:

individual_words = Hash.new(0)

那么当你遇到一个词时,无论它的键是否在哈希中,你所要做的就是:

individual_words[word] += 1
于 2012-10-05T17:29:20.077 回答
0

你也可以做这样的事情

@individual_words[word] ||= 0
@individual_words[word] += 1

||=确保值在不真实的情况下被设置(即 nil)

于 2012-10-05T17:32:05.237 回答