Ruby 指定和初始化映射类型的方法';s的价值观?
我想数一数一行文字中的所有单词。我使用一个映射来实现这一点,单词代表键,整数代表值。我不知道如何告诉Ruby所有的值都是整数。它迫使我在迭代器的块中放置一个丑陋的分支: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 =~
# 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)时设置该值