计算数组中重复元素的数量

时间:2018-03-02 15:16:09

标签: ruby-on-rails ruby

控制器:

@user_location = Country.joins(:user).order(:name).compact.uniq

查看(haml):

- @user_location.each do |user|
  %li= user.name

此时,数组的所有重复元素都将被删除(uniq)。

如何显示数组中重复元素的数量?例如:如果我的数组有

  

一二二三四

然后我需要显示

  

一二(2)三四

4 个答案:

答案 0 :(得分:3)

我希望这样的事可能有用:

str_random(6)

答案 1 :(得分:2)

您需要group_by + map。像这样:

array.group_by(&:itself).map do |k, v|
 { value: k, count: v.length }
end

您将拥有如下所示的哈希数组:{value: 'Two', count: 2}

您可以以任何所需的方式返回数据。但是,直接从SQL获取分组记录要好得多。

答案 2 :(得分:1)

您可以使用each_with_object进行迭代,在将元素分配给哈希键时对其进行计数。例如:

array = %w(One Two Two Three Four)

counts = array.each_with_object(Hash.new(0)) do |el, hash| 
  hash[el] += 1
end
# => {"One"=>1, "Two"=>2, "Three"=>1, "Four"=>1}

counts.map { |k, v| v > 1 ? "#{k} (#{v})" : k }
# => ["One", "Two (2)", "Three", "Four"]

这看起来像你追求的那样吗?如果没有,或者您有任何疑问,请告诉我们!

答案 3 :(得分:0)

%w[One Two Two Three Four].
  group_by{|x|x}.
  map{|k, v|[k,v.count>1?" (#{v.count})":nil]}.
  map(&:compact).
  map(&:join)
#⇒ ["One", "Two (2)", "Three", "Four"]