Newbie question > count array key?


#1

Hi,

newbie question(i guess)

a = Bookings.find(:all, :conditions => [3.days.ago])
a = [id : 1, departure : ‘AMS’, arrival => ‘NY’],[id : 2, departure :
‘AMS’, arrival => ‘BCN’],[id : 3, departure : ‘AMS’, arrival =>
‘BKK’],[id : 4, departure : ‘AMS’, arrival => ‘BKK’] ect.

The value of the key departure and arrival is dynamic based on
table(3000 combinations) and the bookings

I want to find the bookings and count the arrival and departure(s). I
the case of the code above, i want the following output.

departure = AMS > total = 5
arrival = BCN > total = 1
arrival = NY > total = 1
arrival = BKK > total = 2

How can i do this

Grtz…remco


#2

Remco S. wrote:

newbie question(i guess)

a = Bookings.find(:all, :conditions => [3.days.ago])
a = [id : 1, departure : ‘AMS’, arrival => ‘NY’],[id : 2, departure :
‘AMS’, arrival => ‘BCN’],[id : 3, departure : ‘AMS’, arrival =>
‘BKK’],[id : 4, departure : ‘AMS’, arrival => ‘BKK’] ect.

The value of the key departure and arrival is dynamic based on
table(3000 combinations) and the bookings

I want to find the bookings and count the arrival and departure(s). I
the case of the code above, i want the following output.

departure = AMS > total = 5
arrival = BCN > total = 1
arrival = NY > total = 1
arrival = BKK > total = 2

How can i do this

You iterate through the rows, counting the values of interest.

Constructs you may find useful are:

(1) the ‘each’ method of the Array class (to iterate through your array)

a.each do |booking|
p booking
# or do something else with it
end

(2) Hashes, especially ones which have a default value of zero

count = Hash.new(0)

count[“foo”] += 1
count[“bar”] += 1
count[“foo”] += 1

after this, count = {“foo”=>2, “bar”=>1}

(3) the ‘each’ method of the Hash class

count.each do |key,value|
puts “#{key}: #{value}”
end

(4) The ‘irb’ shell, for trying these things out, or script/console if
you are using Rails (the latter will also give you full access to your
model classes)

$ irb
irb(main):001:0> count = Hash.new(0)
=> {}
irb(main):002:0> count[“foo”] += 1
=> 1
irb(main):003:0> count[“bar”] += 1
=> 1
irb(main):004:0> count[“foo”] += 1
=> 2
irb(main):005:0> count
=> {“foo”=>2, “bar”=>1}

See your favourite Ruby documentation for more details on these topics.
If you don’t have any, then an old version of the Pickaxe book is
browsable online for free here:
http://www.ruby-doc.org/docs/ProgrammingRuby/