arrays - 给定一个带有值数组的哈希,如何提取每个键的唯一值的数量?
问题描述
我有一个散列,每个键都有一个值数组:
h = {
'a' => ['c', 'b', 'd'],
'b' => ['c', 'b', 'f', 'g']
}
我需要返回一个散列g
,它给出每个键的“唯一”值的数量h
。例如,h['a']
有 2 个值 ('c'
和b'
) 在它们存在于 的意义上不是唯一的h['b']
。在这种情况下,'a'
in的值g
应该相等1
,因为'd'
是 的唯一唯一元素h['a']
。钥匙也是如此'b'
。它有 2 个与'a'
in共同的值h
,但也有 2 个独特的值('f'
和g'
)。所以在我的情况下g
应该等于{'a' => 1,
b => 2}
。
我试过h.select { |_,a| a.size == 1 }
了,但它返回一个空哈希。
另外,我有一种返回唯一值的方法,但是当我尝试编写 Rspec 测试时它失败了,我的解决方案如下:
@split_log_file.each { |key, array|
"#{key} has #{array.uniq.length} unique visitors" }
解决方案
这应该符合您的要求。
def uniqify(h)
keys = h.keys
keys.each_with_object({}) { |k,g| g[k] =
(keys-[k]).reduce(h[k]) { |a,kk| a-h[kk] }.uniq.size } }
end
h = { 'cat' => ['c', 'b', 'e', 'f', 'c'],
'dog' => ['c', 'b', 'f', 'g', 'h'] }
uniqify h
#=> {"cat"=>1, "dog"=>2}
h = { 'cat' => ['c', 'b', 'd', 'c', 'e', 'f'],
'dog' => ['c', 'b', 'f', 'g'],
'pig' => ['h', 'h', 'b', 'f'] }
uniqify h
#=> {"cat"=>2, "dog"=>1, "pig"=>1}
请参阅数组#-。
推荐阅读
- java - 如何将多个枚举数据写入单个 pojo 并将其作为列表返回
- jhipster - 在 jhipster 单体应用程序上创建角色层次结构
- azure - ##[错误]未处理:句柄不是 Azure DevOps 构建管道中的缓冲区 CopyFilesOverSSH
- javascript - 从渲染画布而不是整个窗口中获取坐标
- html - 使用令人敬畏的字体提高可访问性来传达含义
- python - 如何通过外键返回数组中的整个表行以及如何从 django 模型中的模板访问
- numpy-slicing - numpy delete 不会删除完整的 obj 数组
- flutter - 如何在里面使用弹出窗口导致另一个页面颤动?
- c - 找到鞍点 - C
- ruby-on-rails - 如何在我的 Rails 数据库中保存哈希?