Créer une liste d'objets...puis la trier sur 1 de ses "attributs" en ne prenant

Résolu
Jayme65
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
- 30 mars 2011 à 20:15
nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
- 31 mars 2011 à 15:28
Bonjour,

Je devais créer un tableau à 2 dimensions.
Je me suis dit que je pouvais le faire en créant une classe, et en faisant un: List (Of ma classe)



Public Class Displayed
  Public rom As String
  Public descript As String
End Class

Sub feedArray()
  Dim displayArray As New List(Of Displayed)
  displayArray.Add(New Displayed() With {.descript "AAA", .rom "zzz"})
  displayArray.Add(New Displayed() With {.descript "bbb", .rom "YYY"})
  displayArray.Add(New Displayed() With {.descript "CCC", .rom "xxx"})
End Sub


Première chose: était ce une bonne façon de procéder? Y a t-il plus 'simple' que de créer une classe objet
Y a t-il une autre façon de créer un array/list multi-dimensionnel, avec une taille non définie dès le départ?

Et surtout: comment dois-je faire maintenant pour le trier, alphabétiquement, en choisissant la clé qui va servir au tri ('descript', ou 'rom')...et pour terminer, en ne prenant pas en compte la différence entre majuscule et minuscule ("case insensitive" dans..ActionScript)

Un grand merci pour votre aide!!!

7 réponses

NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
162
31 mars 2011 à 12:39
Bonjour,

As-tu essayé d'implémenter l'interface IComparable dans la classe Displayed ?
Ensuite, le message de nhervagault t'indique d'utiliser la méthode Sort.

3
Jayme65
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
2
31 mars 2011 à 13:09
NHenry,
Je te remercie pour tes conseils qui sont pertinents...tu vois, le "problème" c'est que je programme avec VB depuis seulement 15 jours...alors parfois, il faut vraiment que je "m'accroche" pour comprendre ne serait-ce même que la terminologie ;-)...et je ne te parle pas de la "mécanique" derrière tout cela !!

Ceci dit je pense (grâce à des tutos trouvés) y être parvenu:

Public Class Displayed
    Implements IComparable
    Public rom As String
    Public descript As String
    Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
        Dim c As Displayed = CType(obj, Displayed)
        Return String.Compare(Me.descript, c.descript)
    End Function
End Class

Sub feedArray()
  Dim displayArray As New List(Of Displayed)
  displayArray.Add(New Displayed() With {.descript "AAA", .rom "zzz"})
  displayArray.Add(New Displayed() With {.descript "bbb", .rom "YYY"})
  displayArray.Add(New Displayed() With {.descript "CCC", .rom "xxx"})
End Sub

displayArray.Sort()


Je pense qu'il s'agit bien de la méthode que tu préconisais, n'est ce pas?
Merci pour ton aide, et celle de nhervagault
3
Jayme65
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
2
31 mars 2011 à 00:00
nhervagault,

J'ai bien essayé par moi même..mais je t'avoue que je suis un peu largué...est ce que par hasard tu aurais le temps pour me faire voir à quoi le code correspondrait plus ou moins, en partant de mon code de départ?

Public Class Displayed
  Public rom As String
  Public descript As String
End Class

Sub feedArray()
  Dim displayArray As New List(Of Displayed)
  displayArray.Add(New Displayed() With {.descript "AAA", .rom "zzz"})
  displayArray.Add(New Displayed() With {.descript "bbb", .rom "YYY"})
  displayArray.Add(New Displayed() With {.descript "CCC", .rom "xxx"})
End Sub

Comment puis je trier displayArray, par son "attribut" 'descript', et que cela donne AAA,bbb,CCC et non pas AAA, CCC, bbb comme cela est par ex. le cas en ActionScript (j'ignore si c'est la même chose en VB)
1
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
162
30 mars 2011 à 21:21
Bonjour,

Je pense que si tu implémente l'interface iComparable, tu aura le résultat voulu.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
30 mars 2011 à 21:45
Bonjour

Solution alternative

Passer par des dictionnaires

Passer par la methode sort et un predicat de comparaison

Dans le predicat tu geres ton case insensitif

Les deux ne sont pas couplés

Sort fonctionne sur les List ou Les Dictionnary

http://msdn.microsoft.com/en-us/library/w56d4y5z.aspx

Bon dev
0
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
162
31 mars 2011 à 13:26
Bonjour,

Oui, c'était de ça que je parlais.
Bravo en tout cas car en 15 jours, c'est pas forcément évident :)

Pense à mettre "Réponse acceptée" sur la ou les réponses qui t'ont aidées afin de faciliter les recherches des autres membres.

0
nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
31 mars 2011 à 15:28
Bravo,

Je te conseillerais de mettre ce code ci:
qui est un peu plus précis pour la gestion de la case si elle est importante dans ton code

Comme ca tu sais que tu l'a gérée.


Dim ignoreCase As Boolean = true
returnValue = String.Compare(strA, strB, ignoreCase)
0