我在一个哈希数组中有一个哈希数组。我想根据内部数组的值删除重复项。
topics = [{"defense"=>
[{:id=>30,
:source=>"Hacker News",
:title=>
"China-based campaign breached satellite, defense companies: Symantec",
:link=>
"https://www.reuters.com/article/us-china-usa-cyber/china-based-campaign-breached-satellite-defense-companies-symantec-idUSKBN1JF2X0"}]},
{"companies"=>
[{:id=>30,
:source=>"Hacker News",
:title=>
"China-based campaign breached satellite, defense companies: Symantec",
:link=>
"https://www.reuters.com/article/us-china-usa-cyber/china-based-campaign-breached-satellite-defense-companies-symantec-idUSKBN1JF2X0"}]},
{"Symantec"=>
[{:id=>30,
:source=>"Hacker News",
:title=>
"China-based campaign breached satellite, defense companies: Symantec",
:link=>
"https://www.reuters.com/article/us-china-usa-cyber/china-based-campaign-breached-satellite-defense-companies-symantec-idUSKBN1JF2X0"}]}]
topics.uniq { |phrase, post| post }
puts topics您可以在上面看到短语defense、companies和Symantec各自包含相同的数组。如何只保留包含相同数组之一的第一个散列?
预期输出:
{"defense"=>
[{:id=>30,
:source=>"Hacker News",
:title=>
"China-based campaign breached satellite, defense companies: Symantec",
:link=>
"https://www.reuters.com/article/us-china-usa-cyber/china-based-campaign-breached-satellite-defense-companies-symantec-idUSKBN1JF2X0"}]}注意:在上面的示例中,每个“短语”的内部数组只包含一个散列,但在应用程序中,它可以包含多个帖子。
发布于 2018-06-21 20:33:38
对于每个唯一的值,topics.invert.invert会将散列减少为一个(任意选择的)键。
发布于 2018-06-21 21:39:05
使用此解决方案,您只能获得数组:
topics.map { |topic| topic.values }.uniq.flatten 它只返回:
# => [{:id=>30, :source=>"Hacker News", :title=>"China-based campaign breached satellite, defense companies: Symantec", :link=>"https://www.reuters.com/article/us-china-usa-cyber/china-based-campaign-breached-satellite-defense-companies-symantec-idUSKBN1JF2X0"}]发布于 2018-06-22 09:55:18
topics = [
{ "defense" => [{ id: 30, source: "Hacker", title: "China", link: "F2X0"}] },
{ "companies" => [{ id: 30, source: "Hacker", title: "China", link: "F2X0"}] },
{ "Symantec" => [{ id: 30, source: "Hacker", title: "China", link: "F2X0"}] }
]
topics.uniq { |h| h.values }
#=> [{"defense"=>[{:id=>30, :source=>"Hacker", :title=>"China", :link=>"F2X0"}]}]有关uniq使用块的情况,请参阅Array#uniq。请注意这句话:"self是按顺序遍历的,并且保留第一个出现的内容。“
https://stackoverflow.com/questions/50967781
复制相似问题