Code360 powered by Coding Ninjas X Naukri.com. Code360 powered by Coding Ninjas X Naukri.com
Table of contents
1.
Introduction
2.
Hashes in Ruby
3.
Hash Literals
4.
Hash Codes, Equality, and Mutable Keys
5.
Frequently Asked Questions
5.1.
What is the use of hashes in Ruby?
5.2.
What is a nested hash?
5.3.
What is the difference between the OR(||) and AND(&&) operators in ruby?
5.4.
What are a truthy value and falsy value?
5.5.
In Ruby, what does "!= nil" mean?
6.
Conclusion
Last Updated: Mar 27, 2024

Hashes in Ruby

Author Komal Shaw
0 upvote
Master Python: Predicting weather forecasts
Speaker
Ashwin Goyal
Product Manager @

Introduction

Ruby is the interpreted high-level programming language that supports various programming paradigms. It was designed with an emphasis on programming productivity and simplicity.

A hash is a data structure that stores data as UNIQUE key-value pairs. A Ruby hash comprises a set of unique keys and values. They are similar to arrays, but hashes take any object type as an index, whereas arrays use integers. Associative arrays, dictionaries, and maps are other names for them.

Hashes in Ruby

A hash is a data structure that keeps track of a series of objects called keys and assigns a value to each. Because they map keys to values, hashes are also known as maps.

Because they correlate values with each of the keys, they are frequently referred to as associative arrays, and they can be thought of as arrays in which the array index can be any object rather than an integer.

An example is given below:

# This hash will map the names of digits to the digits themselves
numbers = Hash.new  # Create a new, empty, hash object
numbers["one"] = 1 # Mapping the String "one" to the Fixnum 1 
numbers["two"] = 2  # Noting that we are using array notation here 
numbers["three"] = 3 
sum = numbers["one"] + numbers["two"]  # Retrieve values like this.

 

This introduction on hashes discusses the syntax of Ruby's hash literals and the prerequisites for using an object as a hash key.

Get the tech career you deserve, faster!
Connect with our expert counsellors to understand how to hack your way to success
User rating 4.7/5
1:1 doubt support
95% placement record
Akash Pal
Senior Software Engineer
326% Hike After Job Bootcamp
Himanshu Gusain
Programmer Analyst
32 LPA After Job Bootcamp
After Job
Bootcamp

Hash Literals

A hash literal is written as a comma-separated list of key/value pairs within curly braces. A two-character "arrow" separates keys and values: =>. 

The previous Hash object might also be constructed with the following literal:

numbers = { "one" => 1, "two" => 2, "three" => 3 }

 

Symbol objects are more efficient as hash keys than strings in general:

numbers = { :one => 1, :two => 2, :three => 3 }

 

Symbols are immutable interned strings written as identifiers with a colon.

Now both Ruby 1.8 and Ruby 1.9 accept a single trailing comma at the end of the key/value list: 

numbers = { :one => 1, :two => 2, } # Extra comma ignored

 

When the keys are symbols, Ruby 1.9 enables a highly helpful and concise hash literal syntax. In this situation, the colon replaces the arrow at the end of the hash key:

numbers = { one: 1, two: 2, three: 3 }

 

Between the hash key identification and the colon, there may not be any space.

Hash Codes, Equality, and Mutable Keys

Hashes in Ruby are implemented using a data structure known as a hash table, which is predictable. The objects that are used as keys in a hash must have a hash method that returns a Fixnum hashcode. If two keys are equivalent, their hashcodes must be the same.

Although unequal keys might have the same hashcode, hash tables work best when duplicate hashcodes are uncommon.


The eql? function of the Hash class compares keys for equality. eql? behaves similarly to the == operator in most Ruby classes. If you override the eql? method in a new class, you must also override the hash method or your class's instances will not operate as keys in a hash.
 

If you define a class but don't override eql? object identity is determined by comparing instances of that class when they're used as hash keys. Even though two distinct instances of your class reflect the same content, they are distinct hash keys. The default hash technique is suitable in this case: it returns the object's unique object id.

It's worth noting that mutable things pose a challenge as hash keys. The hashcode of an item is usually changed when its content is changed. When you use an object as a key and then change it, the internal hash table is corrupted, and the hash is no longer valid.
 

Ruby recognizes strings as a special case and creates private copies of all strings used as keys because they are mutable yet regularly used hash keys. However, this is the single exception; you must use extreme caution when using any other mutable object as a hash key. Make a private copy of the file or use the freeze method. If you must utilize mutable hash keys, make sure to use the Hash's rehash method after each change.

You can also read about the topic -  hash function in data structure

Frequently Asked Questions

What is the use of hashes in Ruby?

Hash is a data structure that keeps track of a series of objects known as keys, each of which has a value associated with it. A hash is simply a collection of unique keys and their values.

What is a nested hash?

We can use nested hashes to group or associate the data we're working with even more. They assist us in dealing with scenarios in which a category or piece of data is linked to a collection of values rather than a single discrete value.

What is the difference between the OR(||) and AND(&&) operators in ruby?

The order of precedence is the difference between && and and and || and or in Ruby. The operator && has a higher priority than the operator. However, this is usually not an issue unless used with operators in between these two, such as the ternary and assignment operators.

What are a truthy value and falsy value?

In a boolean context, such as an if statement, it's a value considered True and false, respectively.

In Ruby, what does "!= nil" mean?

Nil is a unique value in Ruby that represents the absence of any value. Nil is a NilClass object. Nothing or void is referred to as nil in Ruby.

Conclusion

In this article, we have extensively discussed Hashes in Ruby, hash literals, hash codes, equality, and mutable keys. We hope this blog has helped you enhance your knowledge regarding Hashes in Ruby.

If you want to learn more, check out our articles on Ruby Programming LanguageRuby-DocumentationOfficial Ruby FAQ, and Learn Ruby.

Refer to our guided paths on Coding Ninjas Studio to learn more about DSA, Competitive Programming, JavaScript, System Design, etc.

Enroll in our courses and refer to the mock test and problems available.

Take a look at the interview experiences and interview bundle for placement preparations.

Do upvote our blog to help other ninjas grow.

Happy Coding!

Previous article
Ruby Find Elements in an Array
Next article
Ranges in Ruby
Live masterclass