Array.Sort() pour une classe

Résolu
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012 - 3 déc. 2007 à 20:43
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012 - 4 déc. 2007 à 23:11
Bonjour à tous,
j'ai mon code :
http://tools.codes-sources.com/copy-paste-code.aspx?ID=49


je voudrais trier un Array (ici var(4)).
En fait, j'ai créé une classe Carte qui contient deux propriétés : Carte.Couleur as Uinteger et Carte.Nombre as Uinteger.
var() est un array de type Carte.
Comment trier les valeurs de var en fonction de leur propriété Nombre??
merci encore et qi vous avez des problèmes ou des questions...
voilà le code en fait :




'----------------


Public
Function IsStraightflush(ByVal c1 As Carte, _

ByVal c2 As Carte, _

ByVal BestNumber AsInteger, _

ByVal Flop1 As Carte, _

ByVal Flop2 As Carte, _

ByVal Flop3 As Carte, _

OptionalByVal Turn As Carte = Nothing, _

OptionalByVal Riviere As Carte = Nothing) AsBoolean

Dim var(5) As Carte

'initialisation
var(0) = c1

var(1) = c2

var(2) = Flop1

var(3) = Flop2

var(4) = Flop3

IfNot Turn IsNothingThen
ReDimPreserve var(6)

var(5) = Turn

EndIf

IfNot Riviere IsNothingThen
ReDimPreserve var(7)

var(6) = Riviere

EndIf

Array.Sort(var) 'Erreur : ne peut trier ce genre de classe

'-----------------------








Comme quoi, vraiment rien n'est impossible...

3 réponses

Elxior Messages postés 56 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 29 août 2010 1
3 déc. 2007 à 23:07
Regardes du côté de l'interface IComparable.

http://support.microsoft.com/kb/320727/fr

We can't solve problems by using the same kind of thinking we used when we created them.
3
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012
4 déc. 2007 à 23:11
pour résumer en fait le support microsoft ( pour les personnes qui errent dans ce forum) :
Si une classe MaCla possède une propriété  MaProp de type alphanumérique (lettre et chiffre)
A l'aide d'une nouvelle classe SortCla qui implémente Icomparer on peut donc modifier le mode de comparaison
on ajoute la fonction compare implémentée de Icomparer.compare donc on précise les critères de comparaison pour MaCla en comparant les MaCla.MaProp

dans le code on initialise un nouvel objet de type SortCla et on peut désormais utiliser Array.Sort(array, comparer) en remplaçant les données. voici le produit final :
Public

Class SortCla

Implements IComparer

Public
Function Compare(
ByVal x
As
Object,
ByVal y
As
Object)
As
Integer
Implements System.Collections.IComparer.Compare

Dim cx
As MaCla =
DirectCast(x, Macla)

Dim cy
As MaCla =
DirectCast(y, MaCla)

Return cx.Nombre.CompareTo(cy.MaProp) ' si donnée numérique
Return String.Compare(cx.MaProp, cy.Maprop) ' si données alphanumériques

End
FunctionEnd

Class'et dans le code :

Dim Arr()
As MaCla = {...
}

Dim Comp
As
New SortCla

Array.Sort(Arr, Comp)

merci a excelsior et à NeuroCypher!

Comme quoi, vraiment rien n'est impossible...
3
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012
3 déc. 2007 à 20:44
c'est pas grave la mise en forme n'est pas du tout passée..., il y avait des espaces avant...

Comme quoi, vraiment rien n'est impossible...
0
Rejoignez-nous