我正在进行这项Ruby练习:
编写一个带字符串的函数
letter_count(str)
返回将每个字母映射到其频率的哈希值。不包括在内 空格。
这是一个解决方案:
def letter_count(str)
counts = Hash.new(0)
str.each_char do |char|
counts[char] += 1 unless char == " "
end
counts
end
counts[char] += 1
是什么意思? char == " "
是什么意思?
答案 0 :(得分:3)
世界上有什么计算[char] + = 1意味着什么?
count = counts[char] # retrieve the value at index "char"
count = count + 1 # add one
counts[char] = count # set the value at index "char" to the new value
是"递增和分配"的简写,即可以写成:
==
还有什么是char ==" "意思?
a == b
是相等运算符。如果true
和a
具有相同的值,则b
会返回char == " "
。因此char
如果unless
是空格字符,则返回true。在这种情况下,等式测试由尾随NSLog
反转,因此它最终意味着"为该字符的计数加1,除非该字符是空格"。
答案 1 :(得分:2)
在Ruby中,+=
去了=
和+
。因此counts[char] += 1
变为counts[char] = counts[char] + 1
。现在,通常,如果散列中不存在键,则散列访问方法[]
将返回nil,这就是我们将0传递给构造函数的原因。将值传递给构造函数会使'默认值为'如果某个键不存在则返回值。因此,如果counts[char]
存在,则会向其添加一个,如果不存在,则会将其初始化为0 + 1
,这只是1。
至于最后的比较,unless char == " "
是一个后缀条件,一个迁移到Ruby的Perlism。在Ruby中,您可以在一行的末尾写条件,因此以下三个是等效的。
# One
if not foo
bar
end
# Two
bar if not foo
# Three
bar unless foo
问题描述说要排除空格,所以unless char == " "
确保散列中的增量操作将运行,除非该字符是空格。
答案 2 :(得分:1)
世界上有什么计算[char] + = 1意味着??
a += 1
和a = a + 1
是等效的。此外,使用counts = Hash.new(0)
,0
将设置为新密钥的值(如果密钥不退出)。因此,如果char
是新的,counts[char]
将成为1
counts[char] += 1
。如果它是第二次看到char
,counts[char]
成为2
counts[char] += 1
,因为1
已经设置为counts[char]
如果Alsowhat做char ==" "意思?
char == " "
为" char
则返回true "(空格字符)。