ruby-on-rails ruby - Comment vérifier si une valeur spécifique est présente dans un hash?




array of (7)

J'utilise Rails et j'ai un objet hash. Je veux rechercher le hash pour une valeur spécifique. Je ne connais pas les clés associées à cette valeur.

Comment vérifier si une valeur spécifique est présente dans un hash? Comment puis-je trouver la clé associée à cette valeur spécifique?


Answers

Alors que Hash#has_key? fonctionne mais, comme Matz l'a écrit here , il a été déconseillé en faveur de Hash#key? .

La key? Hash key? méthode vous indique si une clé donnée est présente ou non.

hash.key?(:some_key)


Hash inclut Enumerable , vous pouvez donc utiliser les nombreuses méthodes de ce module pour parcourir le hachage. Il a aussi cette méthode pratique:

hash.has_value?(value_you_seek)

Pour trouver la clé associée à cette valeur:

hash.key(value_you_seek)

Cette documentation de l'API pour Ruby (1.9.2) devrait être utile.


La classe Hash a la méthode select qui renverra un nouveau hachage des entrées pour lesquelles le bloc est true;

h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| v == 200}  #=> {"b" => 200}

De cette façon, vous allez rechercher par valeur et obtenir votre clé!


Une version encore plus courte que vous pourriez utiliser serait hash.values


Si vous faites des hash.values , vous avez maintenant un tableau.

Sur les tableaux, vous pouvez utiliser la méthode de recherche Enumerable include?

hash.values.include?(value_you_seek)

Vous prenez un tas de choses, et un tableau.

Pour chaque chose, vous composez un index pour cela, appelé un hachage. La chose importante à propos du hachage, c'est qu'il «se disperse» beaucoup; vous ne voulez pas que deux choses semblables aient des hachages semblables.

Vous mettez vos objets dans le tableau à la position indiquée par le hachage. Plus d'une chose peut se terminer à un hachage donné, donc vous stockez les choses dans des tableaux ou quelque chose d'autre approprié, que nous appelons généralement un seau.

Lorsque vous regardez les choses dans le hachage, vous passez par les mêmes étapes, en calculant la valeur de hachage, puis en voyant ce qu'il y a dans le seau à cet endroit et en vérifiant si c'est ce que vous cherchez.

Lorsque votre hachage fonctionne bien et que votre tableau est assez grand, il n'y aura au maximum que quelques éléments dans un index particulier du tableau, vous n'aurez donc pas besoin de beaucoup regarder.

Pour les points bonus, faites en sorte que lorsque vous accédez à votre table de hachage, elle déplace la chose trouvée (le cas échéant) au début du compartiment, donc la prochaine fois c'est la première chose vérifiée.





ruby-on-rails ruby hash