Ruby 指定和初始化映射类型的方法';s的价值观?

Ruby 指定和初始化映射类型的方法';s的价值观?,ruby,map,initialization,Ruby,Map,Initialization,我想数一数一行文字中的所有单词。我使用一个映射来实现这一点,单词代表键,整数代表值。我不知道如何告诉Ruby所有的值都是整数。它迫使我在迭代器的块中放置一个丑陋的分支: # in the constructor @individual_words = {} def count_words_from( text_line ) text_line.each do |line| line.scan(/\p{Word}+/) .reject{ |string| string =~

我想数一数一行文字中的所有单词。我使用一个映射来实现这一点,单词代表键,整数代表值。我不知道如何告诉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;
映射单个单词;

为了避免必须将单词第一次出现的类型从
Nil
更改为
Integer

,可以在哈希中设置如下默认值:

individual_words = Hash.new(0)
然后,当你遇到一个单词时,不管它的键是否在散列中,你所要做的就是:

individual_words[word] += 1

您可以在哈希中设置默认值,如下所示:

individual_words = Hash.new(0)
然后,当你遇到一个单词时,不管它的键是否在散列中,你所要做的就是:

individual_words[word] += 1

你也可以这样做

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

| |=
确保在值不是真实值(即nil)时设置该值。

您也可以这样做

@individual_words[word] ||= 0
@individual_words[word] += 1
||=
确保在值不是真实值(即nil)时设置该值