【问题标题】:ruby array of arrays get duplicate string arrayruby数组数组获取重复的字符串数组
【发布时间】:2017-11-08 02:40:13
【问题描述】:

我有这个数组:

arr =[["twitter.com", 9], ["twitter.com", 9], ["google.com", 11], ["paypal.me", 11],
      ["twitter.com", 11], ["yahoo.com", 12], ["google.com", 14], ["twitter.com", 17],
      ["twitter.com", 18], ["youtube.com", 31]]    

如何提取具有重复字符串的数组并获取:

[["twitter.com", 9], ["twitter.com", 9], ["google.com", 11], ["twitter.com", 11],
 ["google.com", 12], ["twitter.com", 17], ["twitter.com", 18]]    

然后添加重复的字符串的值:

[["twitter.com", 64], ["google.com", 25]]    

最后得到一个新数组:

[["twitter.com", 64], ["youtube.com", 31], ["google.com", 25],
 ["yahoo.com", 12],["paypal.me", 11]]  

我试过了:

array.select{|element| array.count(element) > 1 }   

但是得到了:[["twitter.com", 9], ["twitter.com", 9]

【问题讨论】:

  • 您自己尝试过这个问题吗?你尝试了什么?

标签: arrays ruby duplicates


【解决方案1】:

只需计算所有带有each_with_object 的网站:

array.each_with_object(Hash.new(0)) {|(site, count), memo| memo[site] += count}
#=> {"twitter.com"=>64, "google.com"=>25, 
#    "paypal.me"=>11, "yahoo.com"=>12, "youtube.com"=>31}

您可以通过添加 to_a 将结果简单地转换为数组,但 IMO 哈希足以解决您的问题。

【讨论】:

  • 你将如何排序新的数组值升序?
  • @mamesaye, .sort_by {|_, v| -v}
  • @mamesaye:这不是惯用语,只要有可能,请使用sort_by 而不是sort
【解决方案2】:

功能方法:

pairs.
  group_by { |k, v| k }.
  map { |k, ps| [k, ps.map { |k, v| v }.reduce(:+)] }.
  sort_by { |k, v| -v }
#=> [["twitter.com", 64], ["youtube.com", 31], ["google.com", 25],
#    ["yahoo.com", 12], ["paypal.me", 11]]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-02-04
  • 2014-06-23
  • 2016-03-22
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2017-09-21
相关资源
最近更新 更多