Confusion with Hash duplicate key removal

Hi,

I have one basic question to ask regarding Hash key. Follow the below :

“foo”.object_id # => 72994000
“foo”.object_id # => 72993390
{“foo” =>2,“foo” =>3} # => {“foo”=>3}

I do know that Hash don’t allow duplicate keys. But I would like to by
which method hash check if any duplicate key present into it or not? As
I can see “foo” have different object_id,which is expected. But in
case of Hash key how this two different objects “foo” is treated as same
object?

h = Hash.new
h.has_key?(‘foo’)

If you try to create duplicate keys, the existing value is replaced by
the new one.

h = {“foo” =>2,“foo” =>3}
h # => {“foo”=>3}

h[‘foo’] = ‘bar’
h # => {“foo”=>‘bar’}


Dheeraj K.

On Sep 10, 2013, at 12:32 AM, Love U Ruby [email protected] wrote:

I can see “foo” have different object_id,which is expected. But in
case of Hash key how this two different objects “foo” is treated as same
object?

The hash’s keys’ object id’s are not what is compared. If you take both
of those strings, and did this:

“foo” == “foo”

You’d get true, regardless of the fact they have different object ids.

You are making this way way way more complicated than it is.

On Tuesday, September 10, 2013 8:27:13 AM UTC+1, tamouse wrote:

“foo” == “foo”

You’d get true, regardless of the fact they have different object ids.

You are making this way way way more complicated than it is.

By default yes, eql? is used for hash keys (and eql? in turn generally
calls ==).

You can ask for a hash to use object identity though:

h = {}.compare_by_identity => {}
h[‘a’] = 1 # => 1
h[‘a’] = 2 # => 2
h # => {“a”=>1, “a”=>2}

Although it’s not something I’ve ever needed or seen in the wild.

Fred

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs