L'utilisation d'entiers clés de hachage
Est-il approprié d'utiliser des nombres entiers comme les clés dans un Rubis de hachage?
Chaque exemple à partir de la documentation montre une chaîne de caractères ou un symbole utilisé comme une clé, mais jamais un entier.
En interne, serait entiers en quelque sorte converties en chaînes de caractères? J'ai vu des informations contradictoires sur le sujet.
En d'autres termes, est-il un inconvénient majeur à l'utilisation de entier clés d'un hash?
- Avez-vous essayé? Sur votre console, vous pouvez saisir la CISR et d'obtenir une console ruby.. assez utile pour essayer ce type de choses...Sur le sujet, vous devriez être en mesure d'utiliser des entiers de l'amende juste.
- "sauf que l'indexation se fait via arbitraire clés de tout type d'objet". Les nombres entiers sont des objets en Ruby, sont donc des Hachages pour que la matière afin que vous pouvez utiliser Hachages que les clés.
Vous devez vous connecter pour publier un commentaire.
bien sûr, vous pouvez utiliser des nombres entiers comme les clés...
=>
de la cisr est votre ami! essayer..
En fait, vous pouvez utiliser toute Ruby objet comme la touche (ou la valeur).
Nous avons l'habitude de ne pas penser à l'aide de Hachages comme ça, mais il pourrait être très utile.
Autres en regardant les réponses ici trouverez peut-être intéressant de savoir qu'une exception se produit lorsque vous utilisez des entiers comme des touches de symbole dans un Ruby de hachage
{symbol: value}
A Demandé Une Explication:
La réponse la plus simple pour expliquer pourquoi le premier exemple d'échec est probablement que
to_sym
n'est pas une méthode qui a été mis en œuvre pour Fixnum entiers.D'aller plus en profondeur, peut-être à expliquer pourquoi c'est l'un des principaux avantages de l'utilisation de symboles est que deux symboles sont en fait le même objet". Ou, au moins, ils partagent le même id d'objet.
Chaînes qui sont les mêmes ne partagent pas les mêmes objets, et par conséquent ne partagent pas le même id d'objet.
Comme des symboles, Fixnum entiers qui sont de la même aura le même id d'objet. Par conséquent, vous n'avez pas vraiment besoin de les convertir dans des symboles.
La seule condition requise pour l'utilisation d'un objet comme une clé de hachage, c'est qu'il doit répondre au message de hachage avec une valeur de hachage, et la valeur de hachage pour une clé donnée ne doit pas changer. Par exemple, si vous appelez cela:
Vous pouvez voir que le numéro 1, en effet, répond à la hash message
eql?
.Il y a déjà des réponses sur le
is it possible?
.Une explication, pourquoi il n'y a pas d'exemples avec des entiers comme Hachage-clés.
De hachage-clés (la plupart du temps) d'un sens. Il peut être un nom d'attribut et sa valeur (par exemple,
:color => 'red'
...).Lorsque vous avez un entier comme une clé, votre sémantique peut être le " premier, deuxième ...' (1). Mais alors vous ne pouvez pas utiliser une table de hachage, mais un tableau pour stocker vos valeurs.
(1) Un contre-exemple peut être une clé étrangère dans une base de données.