Can i calculate the data number in array?

Array = ["a", "a", "a", "b", "b", “c”, "c", "c","d", "d", "e"]

Can i calculate the data in the Array???

a a a b b c c c d d e

For example: ArrayNumber = [“3”, “2”, “3”, “2”, “1”]

d=[“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”,“d”, “d”, “e”]
p d

dd={}
d.each do |v|
dd[v]||=0
dd[v]+=1
end

p dd

p dd.values

gz zz wrote:

d=[“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”,“d”, “d”, “e”]
p d

dd={}
d.each do |v|
dd[v]||=0
dd[v]+=1
end

p dd

p dd.values

But,I think ruby’s Hash is not ordered,so…

Dear Cool,

maybe this is what you want:

class Array

def count

k=Hash.new(0)

self.each{ |x| k[x]+=1 }

k

end

end

my_array = [“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”,“d”, “d”, “e”]
my_array.count

It gives you a Hash, though, and the numbers are Integers,
not Strings, but this seems more reasonable :slight_smile:

Best regards,

Axel

On 28.06.2007 10:44, Axel E. wrote:

k=Hash.new(0)

my_array = [“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”,“d”, “d”, “e”]
my_array.count

It gives you a Hash, though, and the numbers are Integers,
not Strings, but this seems more reasonable :slight_smile:

Yes, I’d agree. Having tuples as return value is better because then
you maintain relationship between items and item count.

Btw, thanks for leaving the inject solution to me. :slight_smile:

irb(main):005:0> a = %w{a a a b b c c c d d e}
=> [“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”, “d”, “d”, “e”]
irb(main):006:0> a.inject(Hash.new(0)) {|h,x| h[x]+=1; h}
=> {“a”=>3, “b”=>2, “c”=>3, “d”=>2, “e”=>1}
irb(main):007:0> a.inject(Hash.new(0)) {|h,x| h[x]+=1; h}.sort
=> [[“a”, 3], [“b”, 2], [“c”, 3], [“d”, 2], [“e”, 1]]

Kind regards

robert

On 6/28/07, Robert K. [email protected] wrote:

Btw, thanks for leaving the inject solution to me. :slight_smile:
Shame on you!!! :wink:
But that is not what OP asked for

(a|[]).map{|e|a.grep(e).size} ### I know it might not work as we use
#=== here

More generally we have therefore

(a|[]).map{|e|a.select{|x|x==e}.size}

Maybe OP preferred
…).sort.map{…

and sorry OP, I just needed this working break.

Robert

On 28.06.2007 12:56, Robert D. wrote:

On 6/28/07, Robert K. [email protected] wrote:

Btw, thanks for leaving the inject solution to me. :slight_smile:
Shame on you!!! :wink:

Um, why? Somehow I don’t get the joke, sorry. :slight_smile:

But that is not what OP asked for

(a|[]).map{|e|a.grep(e).size} ### I know it might not work as we use
#=== here

Sorry, Robert, but I don’t think this is what the OP was asking for:

irb(main):001:0> a = %w{a a a b b c c c d d e}
=> [“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”, “d”, “d”, “e”]
irb(main):002:0> a.map{|e|a.grep(e).size}
=> [3, 3, 3, 2, 2, 3, 3, 3, 2, 2, 1]

Your solution repeats counts for the same string but as far as I can see
from his original posting he wants counts for each string just once.

More generally we have therefore

(a|[]).map{|e|a.select{|x|x==e}.size}

Maybe OP preferred
…).sort.map{…

and sorry OP, I just needed this working break.

:slight_smile:

Kind regards

robert

On 28.06.2007 16:11, Robert D. wrote:

On 6/28/07, Robert K. [email protected] wrote:

On 28.06.2007 12:56, Robert D. wrote:

On 6/28/07, Robert K. [email protected] wrote:

=> [3, 3, 3, 2, 2, 3, 3, 3, 2, 2, 1]
Careful here Robert I wrote

(a|[]) which is a more computation intensive way to write a.uniq. –
its a coding joke brrr

Umpf! I actually overlooked that one. Somehow I read it as (a||[]).
Duh! Sorry for the noise. Btw, that idiom was not part of my
repertoire. So I actually learned something today - although I have to
say I’d rather stick with #uniq - it’s easier for my brain. :slight_smile:

Kind regards

robert

On 6/28/07, Robert K. [email protected] wrote:

On 28.06.2007 12:56, Robert D. wrote:

On 6/28/07, Robert K. [email protected] wrote:

Btw, thanks for leaving the inject solution to me. :slight_smile:
Shame on you!!! :wink:

Um, why? Somehow I don’t get the joke, sorry. :slight_smile:
Really or are you metajoking?anyway to get out of recursive joke mode,
we are sometimes competing about #inject.
irb(main):002:0> a.map{|e|a.grep(e).size}
=> [3, 3, 3, 2, 2, 3, 3, 3, 2, 2, 1]
Careful here Robert I wrote

(a|[]) which is a more computation intensive way to write a.uniq. –
its a coding joke brrr

Read my post please you can learn sooooo much. – this is a joke!

Robert