计算一系列哈希

时间:2017-11-21 03:21:12

标签: ruby

我有这个哈希数组:

[
  {"name": "John doe","job": "construction"}, 
  {"name": "mary","job": "cook"}
  ...
]

我应该算一下这个名字有多少人。如果有五个"mary",我应该5

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

  name_count = Hash.new(0) # default count of same name: 0
  users = [
     {"name": "John doe","job": "construction"}, 
     {"name": "mary","job": "cook"}
  ]
  users.each do |user|
    name_count[user[:name]] += 1
  end
  puts name_count

答案 1 :(得分:0)

根据您的匹配具体的具体情况,以下内容将对" Mary" s进行不区分大小写的匹配,假设users包含您问题中的数组。

users.count { |user| user['name'] =~ /mary/i }

请参阅Enumerable#count的文档。第三种形式将采用一个块,该块将导致块返回true的项目数。

在我的示例中,我们正在访问每个哈希的'name'密钥,并将其与针对正则表达式/mary/的不区分大小写的匹配进行比较。 The =~ operator返回第一个匹配的整数值(真值)或nil如果不匹配则为假值。

希望这可以通过文档回答您的问题和答案的组成部分。