Ruby Hash

A Hash is a data structure in Ruby that stores key-value pairs. It's similar to an Array, but where an Array uses integers as its index, a Hash allows you to use any object type as an index.

1. Creating a Hash

You can create a Hash by using the literal constructor {}:

my_hash = {}

You can also use Hash.new to create a new Hash:

my_hash = Hash.new

2. Adding to a Hash

You can add elements to a Hash by using the []= operator:

my_hash = {}
my_hash["key"] = "value"

This creates a key-value pair in my_hash where "key" is the key and "value" is the value.

3. Accessing a Hash

You can access elements in a Hash by their key:

my_hash = {"key" => "value"}
puts my_hash["key"] # Outputs: value

4. Iterating Over a Hash

You can iterate over a Hash using methods like each, each_key, and each_value:

my_hash = {"key1" => "value1", "key2" => "value2"}

my_hash.each do |key, value|
  puts "The key is #{key} and the value is #{value}"
end

my_hash.each_key do |key|
  puts "Key: #{key}"
end

my_hash.each_value do |value|
  puts "Value: #{value}"
end

5. Deleting from a Hash

You can remove a key-value pair from a Hash using the delete method:

my_hash = {"key" => "value"}
my_hash.delete("key")

6. Merging Hashes

You can combine two hashes into one using the merge method:

hash1 = {"key1" => "value1"}
hash2 = {"key2" => "value2"}

merged_hash = hash1.merge(hash2) # {"key1" => "value1", "key2" => "value2"}

Note that if the hashes have keys that are the same, the value from the second hash will overwrite the value from the first hash.

7. Checking if a Key or Value Exists

You can check if a key or value exists in a Hash using the has_key? and has_value? methods:

my_hash = {"key" => "value"}

puts my_hash.has_key?("key")  # Outputs: true
puts my_hash.has_value?("value")  # Outputs: true

These are the basics of using Hashes in Ruby. Hashes are a very powerful and flexible data structure that can be used to represent complex data relationships in your programs.

  1. Creating a Hash in Ruby:

    # Using literal notation
    my_hash = { key1: 'value1', key2: 'value2' }
    
    # Using the Hash.new constructor
    another_hash = Hash.new
    another_hash[:name] = 'John'
    
  2. Accessing values in a Ruby Hash:

    my_hash[:key1]  # Accessing value using key
    
  3. Updating values in a Ruby Hash:

    my_hash[:key1] = 'new_value'  # Updating value for an existing key
    
  4. Ruby Hash iteration:

    my_hash.each do |key, value|
      puts "#{key}: #{value}"
    end
    
  5. Merging Hashes in Ruby:

    merged_hash = hash1.merge(hash2)  # Merging two hashes
    
  6. Deleting entries from a Ruby Hash:

    my_hash.delete(:key1)  # Deleting entry by key
    
  7. Sorting a Hash in Ruby:

    sorted_hash = my_hash.sort.to_h  # Sorting by keys
    
  8. Default values in Ruby Hash:

    my_hash = Hash.new('default_value')  # Setting a default value
    
  9. Nested Hashes in Ruby:

    nested_hash = { outer_key: { inner_key: 'value' } }
    
  10. Converting a Hash to an array in Ruby:

    array_from_hash = my_hash.to_a  # Convert hash to array of key-value pairs
    
  11. Comparing Hashes in Ruby:

    hash1 == hash2  # Comparing equality of two hashes
    
  12. Immutable Hashes in Ruby: Ruby Hashes are mutable by default, but you can achieve immutability using freeze:

    my_immutable_hash = { key: 'value' }.freeze