计算数组中的不同元素 [英] Counting the distinct elements in an array

查看:155
本文介绍了计算数组中的不同元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数组:

a = [1, 2, 3, 3, 6, 8, 1, 9]

我要显示每个唯一元素值及其相关元素计数,如下所示:

I want to display each unique element value and its associated element count like this:

1: 2
2: 1
3: 2
6: 1
8: 1
9: 1

到目前为止,我有:

a.sort.group_by { |x| x }
{
  1 => [
    [0] 1,
    [1] 1
  ],
  2 => [
    [0] 2
  ],
  3 => [
    [0] 3,
    [1] 3
  ],
  6 => [
    [0] 6
  ],
  8 => [
    [0] 8
  ],
  9 => [
    [0] 9
  ]
}

因此,哈希的每个元素都包含一个数组.我可以使用该数组的计数来得到答案,但是在弄清楚如何简洁地处理哈希值时遇到了麻烦.

So each element of the Hash contains an array. I can use that array's count to get my answer, but I'm having trouble figuring out how to process the hash concisely.

这是一个可怕的实现吗?

Is this a horrible implementation?

a.sort.group_by { |x| x }.each {|x| puts "#{x[0]} #{x[1].count}" }

推荐答案

怎么样:

a.inject({}) { |a,e| a[e] = (a[e] || 0) + 1; a }
 => {1=>2, 2=>1, 3=>2, 6=>1, 8=>1, 9=>1}

例如:

h = a.inject({}) { |a,e| a[e] = (a[e] || 0) + 1; a }
 => {1=>2, 2=>1, 3=>2, 6=>1, 8=>1, 9=>1} 
h.keys.sort.each { |k| puts "#{k}: #{h[k]}" }
1: 2
2: 1
3: 2
6: 1
8: 1
9: 1

摘自以下其他人的评论:

From comments of others below:

a.each_with_object(Hash.new(0)) { |e,a| a[e] += 1 }
 => {1=>2, 2=>1, 3=>2, 6=>1, 8=>1, 9=>1} 

这篇关于计算数组中的不同元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆