控制器:
@user_location = Country.joins(:user).order(:name).compact.uniq
查看(haml):
- @user_location.each do |user|
%li= user.name
此时,数组的所有重复元素都将被删除(uniq
)。
如何显示数组中重复元素的数量?例如:如果我的数组有
一二二三四
然后我需要表明
一二(2)三四
我希望像这样的东西可能会起作用:
# in the controller (this returns a hash)
@locations = Country.joins(:user).order(:name).group(:name).count
# in your view
- @locations.each do |name, count|
%li
= name
= "(#{count})" if count > 1
你需要group_by
+ map
。像这样:
array.group_by(&:itself).map do |k, v|
{ value: k, count: v.length }
end
你会有像这样的哈希数组:{value: 'Two', count: 2}
。
您可以以任何所需的方式返回数据。但是,直接从SQL获取分组记录要好得多。
您可以使用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"]
这看起来像你在追求什么?如果没有,或者您有任何疑问,请告诉我!
%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"]