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}) }


  • 相关阅读:
    利用string 字符串拷贝
    新手学vim配置
    进程描述符task_struct
    并查集
    堆Heap
    Bitset位图
    排序
    sql时间查询
    javascript 中的 call
    css 笔记——设置禁用中文输入法
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4744518.html
Copyright © 2011-2022 走看看