我在Ruby中有以下哈希:
{
0 => {
:method=>\"POST \",
:path=>\"/api/online/platforms/fb/users/191023/add_infos\",
:host=>\"host.12\",
:duration=>\"1221\"
},
1 => {
:method=>\"GET \",
:path=>\"/api/customer/191023/messages\",
:host=>\"host.8\",
:duration=>\"99\"
},
2 => {
:method=>\"POST \",
:path=>\"/logs/data\",
:host=>\"host.10\",
:duration=>\"142\"
},
3 => {
:method=>\"POST \",
:path=>\"/api/customer/191023\",
:host=>\"host.6\",
:duration=>\"243\"
}
4 => {
:method=>\"POST \",
:path=>\"/api/customer/191023\",
:host=>\"host.2\",
:duration=>\"132\"
}
}
我想在这些哈希中进行简单搜索,以找到方法键设置为POST
且路径键设置为"/api/customer/191023"
的那些。相当于data.where(method: "POST", path: "/api/customer/191023")
。
首先,我仅使用基于select
的{{1}}进行了尝试:
method
但是返回的哈希是空的。
谢谢。
微米。
答案 0 :(得分:2)
我看到:method
键的值后面有空格,所以请尝试regexp来匹配它,如下所示:
hs = hash.select {|k, h| h[:method] =~ /POST/ && h[:path] == '/api/customer/191023' }
要查找频率最高的主机值,请执行以下操作:
hs = hash.values.group_by { |h| h[:host] =~ /host\.(\d+)/ && $1.to_i || 0 }.to_a
hs.reduce([-1,0]) { |sum,v| v[1].size > sum[1] && [ v[0], v[1].size ] || sum }.first