Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何获得元素中最常见的类_Ruby - Fatal编程技术网

Ruby 如何获得元素中最常见的类

Ruby 如何获得元素中最常见的类,ruby,Ruby,如何获得数组元素中最常见的数据类型,即类?例如,对于此阵列: array = [nil, "string", 1, 3, 0.234, 25, "hot potato"] 整数应该返回,因为它是最常见的类 array.group_by(&:class).max_by{|k, v| v.length}.first # => Integer 第一步是 array.each_with_object(Hash.new(0)) { |e,h| h[e.class] += 1 } #=

如何获得数组元素中最常见的数据类型,即类?例如,对于此阵列:

array = [nil, "string", 1, 3, 0.234, 25, "hot potato"]
整数应该返回,因为它是最常见的类

array.group_by(&:class).max_by{|k, v| v.length}.first
# => Integer
第一步是

array.each_with_object(Hash.new(0)) { |e,h| h[e.class] += 1 }
  #=> {NilClass=>1, String=>2, Integer=>3, Float=>1} 
第一步是

array.each_with_object(Hash.new(0)) { |e,h| h[e.class] += 1 }
  #=> {NilClass=>1, String=>2, Integer=>3, Float=>1} 

以下方法也可以起作用

array.inject(Hash.new(0)) { |h,v| h[v.class] += 1; h }.max_by(&:last).first

以下方法也可以起作用

array.inject(Hash.new(0)) { |h,v| h[v.class] += 1; h }.max_by(&:last).first

“数据类型”是指元素的类吗?@Stefan我想我使用了数据类型,以防类的意思是我不知道的更具体的东西。看起来类就是我的意思,编辑了问题/标题以反映数据类型,你是指元素的类吗?@Stefan我相信,所以我使用了数据类型,以防类意味着我不知道的更具体的内容。看起来类就是我的意思,编辑了问题/标题以反映这将调用每个元素的计数,从而多次遍历数组。如果您关心速度,请尝试使用一个更大的数组,在现实生活中速度应该非常重要,例如数组*100000,然后看看会发生什么。@ray但是它的默认值是0,所以在第一次调用时,h[:z]=h[:z]+1变为h[:z]=0+1。您必须多次运行每个基准测试才能得到有意义的结果。将每个测试用50000次{…}包装起来,看看会发生什么。inject和每个\u with_对象应该几乎相同,group_by应该稍微快一点。“each_by_object”应该是…max_by&:last,而不是…max_by。我建议您添加require'benchmark'。这将调用每个元素的count,从而多次遍历数组。如果您关心速度,请尝试使用一个更大的数组,在现实生活中速度应该是重要的,例如数组*100000,看看会发生什么。@ray但它的默认值为0,所以h[:z]=h[:z]在第一次调用时,+1变为h[:z]=0+1。您必须多次运行每个基准测试才能获得有意义的结果。将每个测试用50000次{…}包装起来,看看会发生什么。inject和每个\u with_对象应该几乎相同,group_by应该稍微快一点。“each_by_object”应该是…max_by&:last,而不是…max_by。我建议您添加“基准测试”。