class Hash(K, V)

Overview

A Hash represents a collection of key-value mappings, similar to a dictionary.

Main operations are storing a key-value mapping (#[]=) and querying the value associated to a key (#[]). Key-value mappings can also be deleted (#delete). Keys are unique within a hash. When adding a key-value mapping with a key that is already in use, the old value will be forgotten.

# Create a new Hash for mapping String to Int32
hash = Hash(String, Int32).new
hash["one"] = 1
hash["two"] = 2
hash["one"] # => 1

Hash literals can also be used to create a Hash:

{"one" => 1, "two" => 2}

Implementation is based on an open hash table. Two objects refer to the same hash key when their hash value (Object#hash) is identical and both objects are equal to each other (Object#==).

Enumeration follows the order that the corresponding keys were inserted.

NOTE When using mutable data types as keys, changing the value of a key after it was inserted into the Hash may lead to undefined behaviour. This can be restored by re-indexing the hash with #rehash.

Included Modules

Defined in:

charms/hash_extensions.cr

Instance Method Summary

Instance methods inherited from class Object

blank? : Bool blank?, present? : Bool present?

Instance Method Detail

def get(key : String | Symbol) : V | Nil #

Return the nilable value of a hash key

This returns a value stored in a hash. The key can be specified as a String or Symbol. Internally this works by converting Symbols to Strings. See the code below for an example. It returns nil if the value doesn't exist:

hash = {"name" => "Karin"}
hash.get(:name)  # => "Karin" : (String | Nil)
hash.get("name") # => "Karin" : (String | Nil)
hash.get(:asdf)  # => nil : (String | Nil)

[View source]
def get!(key : String | Symbol) : V #

Return the value of a hash key

This returns a value stored in a hash. The key can be specified as a String or Symbol. Internally this works by converting Symbols to Strings. See the code below for an example. It throws a KeyError if the value doesn't exist:

hash = {"name" => "Karin"}
hash.get(:name)  # => "Karin" : String
hash.get("name") # => "Karin" : String
hash.get(:asdf)  # => KeyError

[View source]