Arrays 哈希数组,如何计算具有最独特“页面”视图的“网页”列表?

Arrays 哈希数组,如何计算具有最独特“页面”视图的“网页”列表?,arrays,ruby,hash,unique-key,Arrays,Ruby,Hash,Unique Key,我试图按顺序显示最独特的页面视图,但不确定如何显示。我有一个包含数据的变量: data = [{"help_page/1"=>"126.318.035.038"}, {"contact"=>"184.123.665.067"}, {"home"=>"184.123.665.067"}, {"about/2"=>"444.701.448.104"}, {"help_page/1"=>"929.398.951.889"}, {"index"=>"444.

我试图按顺序显示最独特的页面视图,但不确定如何显示。我有一个包含数据的变量:

data = [{"help_page/1"=>"126.318.035.038"},
 {"contact"=>"184.123.665.067"},
 {"home"=>"184.123.665.067"},
 {"about/2"=>"444.701.448.104"},
 {"help_page/1"=>"929.398.951.889"},
 {"index"=>"444.701.448.104"},
 {"help_page/1"=>"722.247.931.582"},
 {"about"=>"061.945.150.735"},
 {"help_page/1"=>"646.865.545.408"},
 {"home"=>"235.313.352.950"},
 {"help_page/1"=>"543.910.244.929"},
 {"home"=>"316.433.849.805"},
 {"contact"=>"543.910.244.929"}]
我试过这样的方法:

data.sort_by {|k, v| -v.uniq.count}.collect{|k, v| "#{k}\t#{v.uniq.count} #{'unique views', v.uniq.count}"}
我试图得到与以下类似的结果:

/help_page/1    XX unique views
/contact    XX unique views
/home   XX unique views
/index  XX unique views
/about/2    XX unique views
/about  XX unique views
但是没有成功。

是您的朋友,下面的所有内容都只是格式化输出

data.group|U按do|h| h、 首先,首先 end.map do | k,v| [k,v.计数] end.sort_by&:last.reverse.to_h ⇒ {help_page/1=>5, 主页=>3, 联系人=>2, 大约=>1, 指数=>1, 关于/2=>1}
我们可以使用v2.7中新增的方法:

data.map { |h| h.keys.first }.
     tally.
     sort_by { |_,count| -count }.
     each { |k,v| puts "#{k}   #{v} unique views" }
显示:

help_page/1   5 unique views
home   3 unique views
contact   2 unique views
about   1 unique views
index   1 unique views
about/2   1 unique views
步骤如下

a = data.map { |h| h.keys.first }
  #=> ["help_page/1", "contact", "home", "about/2", "help_page/1",
  #    "index", "help_page/1", "about", "help_page/1", "home",
  #    "help_page/1", "home", "contact"] 
b = a.tally
  #=> {"help_page/1"=>5, "contact"=>2, "home"=>3, "about/2"=>1,
  #    "index"=>1, "about"=>1} 
c = b.sort_by { |_,count| -count }
  #=> [["help_page/1", 5], ["home", 3], ["contact", 2], ["about", 1],
  #    ["index", 1], ["about/2", 1]]
c.each { |k,v| puts "#{k}   #{v} unique views" }
  #=> <displays the results shown above>

很好,我喜欢理货的主意。还没有安装2.7yet@engineersmnky,有传闻说一个方法Enumerally_by正在工作中,相当于使用一个块进行计数,这将允许我们在这里通过{| h | h.keys.first}写入data.tally_。你可能会问,为什么tally没有一个可选的区块?接下来可能是Enumerabletally_-ho,用于猎狐应用程序。那么,我肯定会坚持Enumeratornext的别名为sally_,因为哈希数组的构造看起来不正确;它的笨拙和尴尬的使用,所以我怀疑这是一个XY的问题。看看它的构造是否更符合习惯,这样会更容易使用。