Tri indexé

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
SORLET
Messages : 14
Inscription : lun. 02/janv./2006 7:55
Localisation : Montreuil-sous-Bois

Tri indexé

Message 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 ?
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour

Qu'est ce qu'un tableau indéxé à un autre ?
Denis

Bonne Jounée à tous
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
SORLET
Messages : 14
Inscription : lun. 02/janv./2006 7:55
Localisation : Montreuil-sous-Bois

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

En fait, c'est SortStructuredList(). Mais bon, t'avais compris :lol:

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
SORLET
Messages : 14
Inscription : lun. 02/janv./2006 7:55
Localisation : Montreuil-sous-Bois

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
Répondre