首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby -如何删除哈希数组中的重复项?

Ruby -如何删除哈希数组中的重复项?
EN

Stack Overflow用户
提问于 2018-06-21 19:44:15
回答 3查看 1.1K关注 0票数 2

我在一个哈希数组中有一个哈希数组。我想根据内部数组的值删除重复项。

代码语言:javascript
运行
复制
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

您可以在上面看到短语defensecompaniesSymantec各自包含相同的数组。如何只保留包含相同数组之一的第一个散列?

预期输出:

代码语言:javascript
运行
复制
{"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"}]}

注意:在上面的示例中,每个“短语”的内部数组只包含一个散列,但在应用程序中,它可以包含多个帖子。

EN

回答 3

Stack Overflow用户

发布于 2018-06-21 20:33:38

对于每个唯一的值,topics.invert.invert会将散列减少为一个(任意选择的)键。

票数 3
EN

Stack Overflow用户

发布于 2018-06-21 21:39:05

使用此解决方案,您只能获得数组:

代码语言:javascript
运行
复制
topics.map { |topic| topic.values }.uniq.flatten 

它只返回:

代码语言:javascript
运行
复制
# => [{: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"}]
票数 0
EN

Stack Overflow用户

发布于 2018-06-22 09:55:18

代码语言:javascript
运行
复制
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是按顺序遍历的,并且保留第一个出现的内容。“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50967781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档