说我有这样的数组:
[["bham", "php"],
["auburn", "php"],
["bham", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["mobile", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"],
["tucson", "php"],
["tucson", "php"],
["phoenix", "php"],
["phoenix", "php"],
["phoenix", "php"]]
Run Code Online (Sandbox Code Playgroud)
我想做一些事情:
php第二个元素的数组的数量- 所以`["bham","php"]将计为1.bham在整个数组中auburn出现了多少次,以及出现了多少次等等.所以基本上,我想循环遍历这个2D数组,并且对于每个孩子的第一个元素,我想检查一下我是否已经记录了这个字符串 - 如果我有,那么我增加记录的值,如果我没有,那么我为这个新字符串创建一个新条目.这个特殊的数组相对简单,可以相对容易地在视觉上完成,但假设我将拥有一个包含数百/数千个元素的数组.
假设每个子数组的两个元素总是一个单词也是安全的 - 所以它应该相对容易跟踪.
我该如何处理?
数量很简单:
a.count{|x| x[1] == 'php'}
#=> 24
Run Code Online (Sandbox Code Playgroud)
并且为了分组group_by:
a.group_by{|x| x[0]}.map{|k,v| [k,v.size]}
#=> [["bham", 2], ["auburn", 1], ["phoenix", 18], ["mobile", 1], ["tucson", 2]]
Run Code Online (Sandbox Code Playgroud)