Pourquoi est-ce et peut-on compter?
Tout hachage va avoir un "tri naturel".
A « tri naturel » est soit maintenu soit en tant que chaque élément est inséré ou est réalisée avant la première recherche.
S'il n'y a pas de tri naturel renvoyé, une valeur correspondant à une clé particulière nécessiterait une recherche exhaustive.
Une recherche exhaustive, bien sûr, prendrait n comparaisons où n est le nombre d'éléments dans le hachage. (Par exemple 65536 éléments fouillés 65536 comparaisons.)
D'autre part, si un hachage est trié Dans l'ordre alphabétique, une recherche binaire peut trouver une correspondance dans les comparaisons LOG2 (n). (Par exemple 65536 éléments recherchés dans 16 comparaisons.)
Il existe d'autres méthodes de tri, mais elles nécessitent toutes un tri initial. Ce type peut être un système avec un index caché qui laisse les éléments de paire clé/valeur non triés.
par exemple. Dans l'implémentation partielle suivante, les paires clé/valeur sont stockées en tant qu'objets dans un tableau sous-jacent.
myArray[0] = {"b", "Skies"}
myArray[1] = {"c", "dog"}
myArray[2] = {"a", "Jax"}
myArray[3] = {"d", "gone"}
myArray[4] = {"r", "run"}
myArray[5] = {"q", "quit"}
un second réseau, auquel le développeur Ruby n'a pas accès, détient le genre.
sortArray[0] = 2
sortArray[1] = 0
sortArray[2] = 1
sortArray[3] = 3
sortArray[4] = 4
sortArray[5] = 5
Ainsi, en interne à l'objet de hachage
for(i=0 to 5)
print myArray[sortArray[i]]
imprimerait le tableau trié.
La spécification de Ruby ne spécifie apparemment pas la méthode à utiliser, le tri par clé, un tri caché, ou une autre méthode, donc, non, vous ne pouvez pas compter sur le tri naturel.
Comment imprimez-vous votre hash? Appelez-vous inspecter? –
* De quoi * parlons-nous ici? IRM 1,8? IRM 1.9? JRuby? Rubinius? MacRuby? Les détails de mise en œuvre comme celui-ci varient nécessairement selon la mise en œuvre. – Chuck
J'utilise 'each_pair do | k, v |' veuillez voir la mise à jour ci-dessus –