Associative le tri d'un tableau par la valeur en Lua
J'ai une clé => valeur de la table j'aimerais en Lua. Les touches sont tous les nombres entiers, mais ne sont pas consécutifs (et le sens). Lua est seulement fonction de tri semble être de la table.trier
, qui traite des tables sous forme de tableaux simples, en écartant les clés originales et leur association avec des objets en particulier. Au lieu de cela, j'avais l'essentiel, comme pour être en mesure d'utiliser PHP asort()
fonction.
Ce que j'ai:
items = {
[1004] = "foo",
[1234] = "bar",
[3188] = "baz",
[7007] = "quux",
}
Ce que je veux après l'opération de tri:
items = {
[1234] = "bar",
[3188] = "baz",
[1004] = "foo",
[7007] = "quux",
}
Des idées?
Edit: en Fonction de vos réponses, je vais supposer que c'est tout simplement un étrange caprice de l'embedded interpréteur Lua je suis travailler avec, mais dans tous mes tests, pairs()
renvoie toujours les éléments de tableau dans l'ordre dans lequel elles ont été ajoutées à la table. (c'est à dire les deux déclarations ci-dessus itérer différemment).
Malheureusement, parce que ce n'est pas un comportement normal, on dirait que je ne peux pas obtenir ce dont j'ai besoin; Lua n'ont pas les outils nécessaires intégré (bien sûr) et intégré à l'environnement est trop limité pour moi de travailler autour d'elle.
Encore, merci pour votre aide à tous!
- Ces deux tables sont exactement les mêmes.
Vous devez vous connecter pour publier un commentaire.
Vous semblent mal comprendre quelque chose. Ce que vous avez ici est une tableau associatif. Tableaux associatifs ont pas d'ordre explicite sur eux, par exemple, c'est seulement la représentation interne (généralement classées) qui leur ordonne.
En bref -- en Lua, les deux tableaux que vous avez posté sont la même.
Ce que vous voulez au lieu de cela, est d'une telle représentation:
Si vous ne pouvez pas les obtenir par l'indice de maintenant (ils sont indexés, 1, 2, 3, 4, mais vous peut créer un autre indice de la matrice de), vous pouvez les trier à l'aide de
table.sort
.D'une fonction de tri serait alors:
pairs()
, l'ordre est stable et correspond à l'ordre dans lequel les éléments ont été ajoutés. En outre, je n'ai pas la possibilité de changer la façon dont les données sont stockées; je nourris le résultat dans une 3e partie de la bibliothèque qui affiche les éléments à l'utilisateur de "pairs()
ordre".return a[0] < b[0]
peu moi aussi beaucoup de temps ainsi. Lua index de base 1.return a[2] < b[2]
?Comme Komel ' a dit, vous avez à traiter avec des tableaux associatifs, qui n'ont aucune garantie de la commande.
Si vous voulez commander des clés, fondé sur sa valeur associée à la préservation du tableau associatif fonctionnalité, vous pouvez faire quelque chose comme ceci:
sortedKeys est {1234,3188,1004,7007}, et vous pouvez accéder à vos données comme suit:
résultat:
hmm, a raté la partie de ne pas être en mesure de contrôler l'itération. il y
Mais en lua il y a toujours un moyen.
http://lua-users.org/wiki/OrderedAssociativeTable
C'est un début. Maintenant, vous devez remplacer les paires() que la bibliothèque utilise. Qui pourrait être simples comme des paires=my_pairs. Vous pouvez ensuite utiliser la solution dans le lien ci-dessus
PHP tableaux sont différents de Lua tables.
Un tableau PHP peut avoir un liste ordonnée de paires clé-valeur.
Une table Lua contient toujours un non ordonnée ensemble de paires clé-valeur.
Une table Lua agit comme un tableau lorsqu'un programmeur choisit d'utiliser les nombres entiers 1, 2, 3, ... comme des clés. La syntaxe de la langue et des fonctions de la bibliothèque standard, comme
table.sort
d'apporter un soutien spécifique pour les tables avec consécutives entier clés.Donc, si vous souhaitez émuler un tableau PHP, vous aurez à le représenter à l'aide de la liste de paires clé-valeur, qui est vraiment un tableau de tableaux, mais il est plus utile de penser à elle comme à une liste de paires clé-valeur. Passer une coutume "moins que" la fonction de
table.sort
et vous serez tous ensemble.N. B. Lua permet de mélange consécutives entier touches avec d'autres types de clés dans la même de la table et de la représentation, c'est efficace. J'utilise cette fonction parfois, généralement à l'étiquette d'un tableau avec quelques morceaux de métadonnées.
De venir à cet, quelques mois plus tard, avec la même requête. La réponse recommandée semblait à identifier l'écart entre ce qui était nécessaire, et à quoi cela ressemble en LUA, mais il n'a pas obtenir de moi ce que je recherchais exactement :- qui a été un Hachage triés par Clé.
Les trois premières fonctions sur cette page N'a toutefois : http://lua-users.org/wiki/SortedIteration
J'ai fait un bref peu de Lua de codage il y a quelques années mais je ne suis plus couramment en elle.
Lorsqu'ils sont confrontés à un problème similaire, j'ai copié mon tableau à un autre tableau avec les clés et les valeurs inversée, puis utilisé
sort
sur le nouveau tableau.Je n'étais pas au courant de la possibilité de trier le tableau à l'aide de la méthode de Kornel Kisielewicz recommande.