我有两个这样的数组:
["1","7","8","10"]
Run Code Online (Sandbox Code Playgroud)
和
["1","2","3","6","9","11"]
Run Code Online (Sandbox Code Playgroud)
Place这些数组代表用户选择的一个类的 id 。我想选择得票最多的地点 id。我尝试过transpose,但由于数组大小不同,因此无法转置。
此示例的预期输出是:
{ "1" => 2, "7" => 1, "8" => 1, "10" => 1, "2" => 1, "3" => 1, "6" => 1, "9" => 1, "11" => 1 }
Run Code Online (Sandbox Code Playgroud)
您可以连接所有数组并计算相同元素的数量,如下所示:
arrays = [["1","7","8","10"], ["1","2","3","6","9","11"]].reduce(:+)
arrays.inject(Hash.new(0)) { |memo, e| memo.update(e => memo[e] + 1) }
# "{ "1" => 2, "7" => 1, "8" => 1, "10" => 1, "2" => 1, "3" => 1, "6" => 1, "9" => 1, "11" => 1 }"
Run Code Online (Sandbox Code Playgroud)
一旦获得中间结果,就可以max_by从哈希中选择具有最大值的键:
arrays = [["1","7","8","10"], ["1","2","3","6","9","11"]].reduce(:+)
arrays.inject(Hash.new(0)) { |memo, e| memo.update(e => memo[e] + 1) }
.max_by { |_, count| count }[0]
#=> "1"
Run Code Online (Sandbox Code Playgroud)