【发布时间】:2021-08-12 18:53:43
【问题描述】:
我正在尝试编写一个 ruby 程序来计算该值在散列中的所有值中出现的次数。为此,我正在创建一个方法 -
count_value(哈希值)
def count_value(hash, value)
Hash[hash.group_by { |k, value| value }.map { |k, value| [k, value.count] }]
end
puts count_value(hash, 2)
但是,我没有得到实际结果。我想要这种格式的结果:-
count_value(hash, 2) => 1
count_value(hash, 3) => 1
count_value(hash, 5) => 2
count_value(hash, 10) => 0
如何做到这一点?我在代码sn-p中犯了什么错误?
【问题讨论】:
-
您的方法采用
hash参数。但是你通过在方法的第一行重新分配它来隐藏它 (hash = {a: 5, b:2, c: 3, d: 5})。 -
hash.values.count {|v| v == value}。但是,您将所有内容都称为“价值”并没有帮助。这使代码更难理解;) -
@max - 如果我删除该哈希参数,那么我会得到这样的结果 - {5=>2, 2=>1, 3=>1} 。与测试用例不匹配。
-
感谢@TomLord - 成功了。
-
另外,有一个聪明的小方法可以解决这个更难的问题“建立一个出现的计数......” - ruby 有一个特殊的方法叫做
tally:) 你可以做到这一点:hash.values.tally。然后要达到您想要的结果,请使用hash.values.tally[value] || 0