检查结果是否存在于 3 个哈希数组中
check if result exists inside of 3 arrays of hashes
3 个散列数组 likes(@contest)["data"], shares(@contest)["data"], comments(@contest)["data"]
具有以下结构:
赞(@contest)["data"]
{"id"=>"101530244445809095", "name"=>"Jhon"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
分享(@contest)["data"]
{"id"=>"101530244445809095", "name"=>"Andres"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
评论(@contest)["data"]
{"id"=>"101530244445809095", "name"=>"Paul"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
我只想得到结果,在这三个例子中,公共哈希值或哈希值
{"id"=>"777860702747597", "name"=>"Pepe"}
如果 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"}]
这是 shorthand 用于:
a.reduce { |common, arr| common & arr }
您可以使用&
计算交集,这将给出3个数组中共有的哈希值:
[likes(@contest)["data"], shares(@contest)["data"], comments(@contest)["data"]]
.inject(:&)
3 个散列数组 likes(@contest)["data"], shares(@contest)["data"], comments(@contest)["data"]
具有以下结构:
赞(@contest)["data"]
{"id"=>"101530244445809095", "name"=>"Jhon"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
分享(@contest)["data"]
{"id"=>"101530244445809095", "name"=>"Andres"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
评论(@contest)["data"]
{"id"=>"101530244445809095", "name"=>"Paul"}
{"id"=>"777860702747597", "name"=>"Pepe"}
.
.
.
.
.
.
我只想得到结果,在这三个例子中,公共哈希值或哈希值
{"id"=>"777860702747597", "name"=>"Pepe"}
如果 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"}]
这是 shorthand 用于:
a.reduce { |common, arr| common & arr }
您可以使用&
计算交集,这将给出3个数组中共有的哈希值:
[likes(@contest)["data"], shares(@contest)["data"], comments(@contest)["data"]]
.inject(:&)