Hash
Un dictionnaire représente une correspondance entre des clés de type K
et des valeurs de type V
. Il est typiquement créé avec un litéral de dictionnaire:
{1 => 2, 3 => 4} # Hash(Int32, Int32)
{1 => 2, 'a' => 3} # Hash(Int32 | Char, Int32)
Un dictionnaire peut mélanger plusieurs types, pour les clés comme pour les valeurs, signifiant que K
/V
sera l'union des types, mais cela est à déterminer à la création du dictionnaire, soit en définissant K
et V
soit en utilisant un litéral de dictionnaire. Dans ce dernier cas, K
sera défini comme l'union des clefs du dictionnaire, et V
sera défini comme l'union des valeurs du dictionnaire.
Quand vous créez un dictionnaire vide vous devez toujours définir K
et V
:
{} of Int32 => Int32 # same as Hash(Int32, Int32).new
{} # syntax error
Types similaires aux dictionnaires
Vous pouvez également utiliser une syntaxe de litéral de dictionnaire spéciale avec d'autres types, tant que vous définissez une méthode new
sans argument et une méthode []=
:
MyType{"foo" => "bar"}
Si MyType
n'est pas générique, l'exemple précédent est équivalent à:
tmp = MyType.new
tmp["foo"] = "bar"
tmp
Si MyType
est générique, l'exemple précédent est équivalent à:
tmp = MyType(typeof("foo"), typeof("bar")).new
tmp["foo"] = "bar"
tmp
Dans le cas d'un type générique, les arguments du type peuvent également être spécifiés:
MyType(String, String) {"foo" => "bar"}