Page 1 sur 1
Tri indexé
Publié : jeu. 19/janv./2006 11:27
par SORLET
Il existe la commande : “SortArray(Tableau(), Ordre [, Debut_Plage, Fin_Plage])” pour classer un tableau en ordre croissant ou en ordre décroissant. Mais... comment classer un second tableau indexé au premier ? En GFA Basic, j'utilisais : “QSORT Tableau_1(Ordre)[,Fin_Plage][,Tableau_2%()]”. Y a-t-il un solution ?
Publié : ven. 20/janv./2006 12:58
par brossden
Bonjour
Qu'est ce qu'un tableau indéxé à un autre ?
Publié : ven. 20/janv./2006 13:15
par nico
Cela voudrait dire que le second tableau est indexé (classé) par rapport au premier tableau. Sans exemple concret, je ne vois pas bien comment faire la chose!
Publié : ven. 20/janv./2006 13:24
par Chris
Pareil!
J'ai jamais vraiment compris ce système.
Il y a ça dans les bases de données, mais comment ça marche?
Ca reste un mystère, pour moi!
Sinon, ça ne reviendrait pas à relier un tableau à une structure, comme dans l'exemple qu'il y a dans l'aide?
Code : Tout sélectionner
Structure Personne
Nom.s
Prenom.s
Age.w
EndStructure
Dim MesAmis.Personne(100)
; Ici la position '0' du tableau MesAmis()
; contiendra une personne et ses informations personnelles
MesAmis(0)\Nom = "Michel"
MesAmis(0)\Prenom = "Durand"
MesAmis(0)\Age = 32
Publié : ven. 20/janv./2006 15:29
par SORLET
J’explique : Prenons un tableau contenant une liste de noms et un tableau contenant une liste de tailles ou d’adresses ou d’âges, peu importe. Je les affiche dans l’ordre alphabétique, qui est l’ordre de leur saisie, on va dire :
Noms âges
André 25
Belle 22
Camille 24
Didier 30
Émile 23
Etc…
Je trie le deuxième tableau par ordre croissant et j’affiche :
Noms âges
André 22
Belle 23
Camille 24
Didier 25
Émile 30
Le premier tableau ne correspond plus à l’ordre du deuxième. Pour le trier correctement j’ai besoin qu’il soit trié selon l’ordre que prend le deuxième, ainsi :
Noms âges
Belle 22
Émile 23
Camille 24
André 25
Didier 30
J’espère avoir été plus clair, cette fois.
Publié : ven. 20/janv./2006 15:58
par Chris
Ben si c'est seulement pour faire ça, soit tu utilises les listes chainées, soit tu utilises un tableau comme sur mon post au dessus.
Pour les listes chainées, tu as la commande SortList() qui fait la même chose que SortArray() et comme pour les tableaux, tu peux les relier à une structure.
SortList()
Syntaxe
SortList(ListName(), Options [, Debut, Fin])
Description
Trie la liste spécifié selon les options souhaitées. La liste peut être de l'un des types suivants : byte, word, long, string ou float. Une plage Debut, Fin optionnelle peut être indiquée.
Les options peuvent prendre l'une des valeurs suivantes:
0: Trie la liste en ordre ascendant (les plus petites valeurs en tête)
1: Trie la liste en ordre descendant (les plus grandes valeurs en tête)
2: Trie une liste de chaines de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre ascendant
3: Trie une liste de chaines de caractères en ne tenant pas compte de la casse (a=A, b=B etc..) et dans l'ordre descendant
OS Supportés
Windows, Linux, MacOS X
Publié : ven. 20/janv./2006 16:16
par Chris
En fait, c'est SortStructuredList(). Mais bon, t'avais compris
Code : Tout sélectionner
Tri = 1 ; 1 ou 0 : changer la valeur ici pour changer le mode de tri
Structure MesPotes
Nom.s
Age.l
EndStructure
NewList Copains.MesPotes()
Restore Noms
For i = 0 To 4
AddElement(Copains())
Read Nom$ : Copains()\Nom = Nom$
Next
Restore Ages
For i = 0 To 4
SelectElement(Copains(),i)
Read agee : Copains()\Age = agee
Next
ForEach Copains()
Debug Copains()\Nom + " --- "+ Str(Copains()\Age)
Next
Debug ""
SortStructuredList(Copains(),Tri, OffsetOf(Mespotes\Nom), #PB_Sort_String)
ForEach Copains()
Debug Copains()\Nom + " --- "+ Str(Copains()\Age)
Next
DataSection
Noms:
Data.s "André","Robert","Michel","Gérard","Serge"
Ages:
Data.l 20, 24, 32, 41, 29
EndDataSection
Publié : sam. 21/janv./2006 9:43
par SORLET
Merci Chris, C'est pas du tout ce que j'avais l'habitude de faire, mais ça à l'air beaucoup plus riche, souple et structuré que ce que je connaissais. En tout cas c'est génial, merci encore.
Publié : sam. 21/janv./2006 11:46
par Chris
Et tu peux faire exactement la même chose avec un tableau lié à une structure
Code : Tout sélectionner
Tri = 1 ; 1 ou 0 : changer la valeur ici pour changer le mode de tri
Structure MesPotes
Nom.s
Age.l
EndStructure
Dim Copains.MesPotes(4)
Restore Noms
For i = 0 To 4
Read Nom$ : Copains(i)\Nom = Nom$
Next
Restore Ages
For i = 0 To 4
Read agee : Copains(i)\Age = agee
Next
For i = 0 To 4
Debug Copains(i)\Nom + " --- "+ Str(Copains(i)\Age)
Next
Debug ""
SortStructuredArray(Copains(),Tri, OffsetOf(Mespotes\Nom), #PB_Sort_String)
For i = 0 To 4
Debug Copains(i)\Nom + " --- "+ Str(Copains(i)\Age)
Next
DataSection
Noms:
Data.s "André","Robert","Michel","Gérard","Serge"
Ages:
Data.l 20, 24, 32, 41, 29
EndDataSection