具有此结构的3个哈希likes(@contest)["data"], shares(@contest)["data"], comments(@contest)["data"]
数组:
喜欢(@contest)[ “数据”
{"id"=>"101530244445809095", "name"=>"Jhon"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
股(@contest)[ “数据”
{"id"=>"101530244445809095", "name"=>"Andres"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
评论(@contest)[ “数据”
{"id"=>"101530244445809095", "name"=>"Paul"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
我想得到的结果是,在这种情况下,三者中的常见哈希值或哈希值
{"id"=>"777860702747597", "name"=>"Pepe"}
答案 0 :(得分:4)
如果a
的元素是您的哈希数组:
a = [[{ "id"=>"101", "name"=>"Jhon" },
{ "id"=>"777", "name"=>"Pepe" },
{ "id"=>"123", "name"=>"Zelda" }],
[{ "id"=>"101", "name"=>"Andres" },
{ "id"=>"777", "name"=>"Pepe" },
{ "id"=>"123", "name"=>"Zelda" }],
[{ "id"=>"101", "name"=>"Paul" },
{ "id"=>"777", "name"=>"Pepe" }]]
]
所有数组中出现的哈希值为:
a.reduce(:&)
#=> [{"id"=>"777860", "name"=>"Pepe"}]
这当然适用于任意数量的数组和散列。
查看Enumerable#reduce(又名inject
)的文档,了解正在发生的事情。您将看到该方法有四种形式。它是我在这里使用的第二个(由@Helder使用并由@Arup建议)。它给出了相同的结果:
a.reduce(&:&)
#=> [{"id"=>"777860", "name"=>"Pepe"}]
这是:
的简写a.reduce { |common, arr| common & arr }
答案 1 :(得分:2)
您可以使用&
来计算交集,这将给出3个数组中共同的散列:
[likes(@contest)["data"], shares(@contest)["data"], comments(@contest)["data"]]
.inject(:&)