On Tue, Mar 25, 2008 at 1:41 PM, Adam Akhtar <adamtemporary / gmail.com> wrote:
>
>  > The most common idiom is:
>  >
>  >    (hash[key] ||= []) << value
>  >
>
>  Thanks for the reply. Can I ask what these || mean..in this case do they
>  mean OR???

a ||= b means a = a || b

and it's a common idiom to assign a value only when the lhs is nil (or false).
A hash by default will return nil for non-existing keys so:

hash[key] ||= [] could be written as hash[key] = hash[key] || []

and means: if the key is not present in the hash, create that entry in
the hash with an empty array as the value.

>  does anyone have any good links on using the use of arrays with hashes
>  in this manner?

I don't have a link, but if you are doing that in a lot of places, remember you
can change the default behaviour of a hash to do the above for you:

hash = Hash.new {|h,k| h[k] = []}

from there on you can say just:

hash[key] << value

because the default value for an inexistent key will trigger the
creation of a new array assigned to that key.

Jesus.