How to count identical string elements in a Ruby array

前端 未结 14 2086
感情败类
感情败类 2020-12-02 06:34

I have the following Array = [\"Jason\", \"Jason\", \"Teresa\", \"Judah\", \"Michelle\", \"Judah\", \"Judah\", \"Allison\"]

How do I produce a count for

相关标签:
14条回答
  • 2020-12-02 07:30

    This is more a comment than an answer, but a comment wouldn't do it justice. If you do Array = foo, you crash at least one implementation of IRB:

    C:\Documents and Settings\a.grimm>irb
    irb(main):001:0> Array = nil
    (irb):1: warning: already initialized constant Array
    => nil
    C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:3177:in `rl_redisplay': undefined method `new' for nil:NilClass (NoMethodError)
            from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:3873:in `readline_internal_setup'
            from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4704:in `readline_internal'
            from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4727:in `readline'
            from C:/Ruby19/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline'
            from C:/Ruby19/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:271:in `signal_status'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:189:in `call'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:189:in `buf_input'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc'
            from C:/Ruby19/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io'
            from C:/Ruby19/lib/ruby/1.9.1/irb/slex.rb:75:in `match'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:287:in `token'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:263:in `lex'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:234:in `block (2 levels) in each_top_level_statement'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `loop'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `block in each_top_level_statement'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `catch'
            from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `each_top_level_statement'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:153:in `eval_input'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:70:in `block in start'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:69:in `catch'
            from C:/Ruby19/lib/ruby/1.9.1/irb.rb:69:in `start'
            from C:/Ruby19/bin/irb:12:in `<main>'
    
    C:\Documents and Settings\a.grimm>
    

    That's because Array is a class.

    0 讨论(0)
  • 2020-12-02 07:31
    names = ["Jason", "Jason", "Teresa", "Judah", "Michelle", "Judah", "Judah", "Allison"]
    Hash[names.group_by{|i| i }.map{|k,v| [k,v.size]}]
    # => {"Jason"=>2, "Teresa"=>1, "Judah"=>3, "Michelle"=>1, "Allison"=>1}
    
    0 讨论(0)
提交回复
热议问题