class Hash(K, V)
- Hash(K, V)
- Reference
- Object
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
- Enumerable({K, V})
- Iterable({K, V})
Defined in:
charms/hash_extensions.crInstance Method Summary
-
#get(key : String | Symbol) : V | Nil
Return the nilable value of a hash key
-
#get!(key : String | Symbol) : V
Return the value of a hash key
Instance Method Detail
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)
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