如何用ruby统计数组或哈希中不同元素的个数

Python018

如何用ruby统计数组或哈希中不同元素的个数,第1张

得到不同数据的值:

%w(a b c a c d).uniq

得到各个元素出现的个数:

count_hash = {}

%w(a b c a c d).each do |item|

key = item.to_sym

if count = count_hash[key]

count_hash[key] = count + 1

else

count_hash[key] = 1

end

end

终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。

http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas

以上是 ruby 文档,他给出了正确的用法:

a = Array.new(2) { Hash.new }

具体步骤如下:

1、用list来演示,安装好python与pycharm之后,打开pycharm,新建Test_List.py。

2、定义lista=('A','B','C','D','E'),使用len函数来判断数组长度,ALT+F10执行后可以看到结果是5,注意获取列表的值用【数组名+[序号]】,例如想要获取第一个值'A',正确的写法是pirnt(lista[0]),注意中括号,且序号是0,数组是自然数排序,第一个序号是0。

3、通过【数组名+[序号]】可以获取数组里指定位置的元素值,有个前提是【指定位置】必须小于数组长度,以本例来讲,【指定位置】必须小于5,如果大于5,就会报长度错(out of range)。

4、在实际应用中,我们经常碰到复杂的数组,例如Listb={'A':0,'B':1,'C':2,'D':3,'E':4},注意我用的是大括号{},同意获取长度,发现长度仍然是5。

5、复杂数组想要获取正确的结果,指定的位置必须是【数组索引】,例如想要指定A得几分,要用【数组名+索引名】,写法是print(Listb['A']),即可获取数组中的元素。