Trier les chaînes et les nombres en Ruby
Je veux le tri d'un tableau par des chaînes d'abord et puis les chiffres. Comment puis-je faire cela?
- Votre question n'est pas vraiment assez spécifique. Qu'essayez-vous de tri? Des chaînes, ou des personnages? Et voulez-vous dire que vous en voulez toujours des lettres à trier plus bas que les chiffres? Que faire si une chaîne a mélangé les lettres et les chiffres? Ou voulez-vous lexicographique de tri dans laquelle les lettres sont triées avant les chiffres?
- Pourriez-vous préciser votre question? Peut-être donner un exemple de l'ordre de tri que vous voulez?
- ce qui est dans le tableau?
- objets. par exemple: some_array = ["objet.object_price_range", "objet.object_price_range" ] l'attribut :object_price_range est une chaîne de caractères qui peuvent être des nombres ou des lettres, mais pour cet exemple dire objet1 est "1-100" et objet2 est "Tout Prix"
Vous devez vous connecter pour publier un commentaire.
Général de résoudre délicat sortes est d'utiliser #sort_by, avec le bloc de retourner un tableau ayant l'enseignement primaire et secondaire de l'ordre de tri (et, si vous en avez besoin, tertiaire, etc.)
Cela fonctionne en raison de la manière de la matrice de comparaison est défini par Ruby. La comparaison est défini par la Tableau#<=> méthode:
Float
objets ? Elle est la rupture, lorsque la collection se compose deFloat
s.. je suis à la base à l'aide de votre code, mais c'est la rupture deFloat
objets..Tri d'un tableau de mixte des nombres et des chaînes en mettant d'abord les nombres, et dans l'ordre, suivie par les chaînes de seconde, et dans l'ordre.
partition...flatten
combo.Normalement, alphabétisation se fait avec des nombres premiers. Si vous souhaitez classer par ordre alphabétique de quelque chose où les lettres sont classés par ordre alphabétique avant les numéros, vous aurez besoin de modifier la fonction de comparaison utilisée.
Ici est un peu verbeux réponses. Diviser le tableau en deux sous-tableaux: les chaînes de caractères et des nombres, de les trier et de concat eux.
Si vous êtes en essayant de trier des majuscules et des minuscules et des chiffres, seules quelques personnes sur terre ne peut le faire à l'extérieur de ses propres applications. C'est un secret de sucker punch. Vous devez utiliser un qsort qui permet de trier facilement jusqu'à ce que vous vous mélangez les cas (majuscules et minuscules). Puis au collège, les livres et internet vous laissent suspendu. Ce hack qui vaut son pesant d'or et la bague en laiton de programmation pour toutes les raisons.
Pour trier les nombres avec des mots vous devez convertir des nombres en chaîne. Vous devez tri préliminaire à l'aide de majuscules. Si vous avez les mots "Ant", "fourmi" et "anT" au moins, ils devraient tous point pour le mot "FOURMI" en majuscules trier la liste. Vous allez ensuite créer une liste (array) de seulement ces trois mots ["Ant", "fourmi" et "anT"]
et utiliser qsort comme un bris d'égalité pour les trier.
Vous insérer dans un dernier tri de tableau. Il est assez difficile de par leur conception. "A" est de 65 ans sur ascii 'a' est de 97 avec beaucoup de déchets caractères entre " Z " et "a"! Il n'est pas un hasard! Un complot je vous dis!
Vous pouvez créer une table de tri le plus sainement, des groupes de personnages comme :
A, A, B, b, C, c, D, D, E, e, F, f, G, g, H, h, I, i, J, j, K, k, L, L, M, m, N, n, ...
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 ...
la construction de la table autour de ce bloc commençant par " "(espace) ascii 32 jusqu'à 128. vous aurez probablement envie de réorganiser les numéros dans l'ordre de l'Un de 65 ans est seulement à titre d'exemple.
Cela rend plus facile mais sera probablement entraîner un gain de performance d'être à l'extérieur de l'macros de la plupart des langages de programmation. Bonne chance!