我有一个数组:keys=[["a","a","b"],["a","b","c"]] 我需要找到 "a","b 的次数","c" 出现在“keys”的每个子数组中。
输出可以是一个哈希:["a"=> [2,1],"b"=>[1,1],"c"=>[0,1]]
我有一个数组:keys=[["a","a","b"],["a","b","c"]] 我需要找到 "a","b 的次数","c" 出现在“keys”的每个子数组中。
输出可以是一个哈希:["a"=> [2,1],"b"=>[1,1],"c"=>[0,1]]
也许不是最快的,但可能是最短的:
Hash[
keys.flatten.uniq.map{|e|
[e, keys.map{|ar| ar.count(e)}]
}
]
=> {"a"=>[2, 1], "b"=>[1, 1], "c"=>[0, 1]}
或者
keys.flatten.uniq.inject({}){|acc,e|
acc.merge({e => keys.map{|ar| ar.count(e)}})
}
这是 1.8.6 版本的截图:
keys.flatten.uniq.inject({}){|acc,e|
acc[e] = keys.map{|ar|
ar.select{|c| c==e}.size
}
acc
}
但是你最好尽快得到那个反向移植的宝石......;)