zoukankan      html  css  js  c++  java
  • Ruby: Count unique elements and their occurences in an array

    Is there a method in Ruby that takes an array, and counts all unique elements and their occurrences and passes them back as a hash?

    For example

      ['A','A','A','A','B','B','C'].method
    > {'A' => 4, 'B' => 2, 'C' => 1}

    Something like that.

    ['A','A','A','A','B','B','C'].group_by{|e| e}.map{|k, v| [k, v.length]}.to_h
    
    
    src = ['A','A','A','A','B','B','C']
    Hash[src.group_by { |x| x }.map { |k, v| [k, v.length] }]
    
    
    counts = Hash.new(0)
    ['A','A','A','A','B','B','C'].each { |name| counts[name] += 1 }
    counts   => {"A"=>4, "B"=>2, "C"=>1}


    ['A','A','A','A','B','B','C'].each_with_object(Hash.new(0)) { |l, o| o[l] += 1 }

    This is the easiest readable for me:

    src = ['A','A','A','A','B','B','C']
    src.group_by(&:to_s).to_a.map { |a| [a[0], a[1].count] }.to_h

    Or here is another solution with reduce method:

    src.reduce({}) { |b, a| b.merge({a => (b[a] || 0) + 1}) }

    Or:

    src.reduce(Hash.new(0)) { |b, a| b.merge({a => b[a] + 1}) }


  • 相关阅读:
    Cookie
    Servlet请求和响应
    Servlet
    Tomcat
    jQuery
    HTTP协议和ajax
    WebApp制作和正则
    BOM对象和json
    视频和音频
    改变文档结构的方法(5种)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4744518.html
Copyright © 2011-2022 走看看