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

Jayme65 64 Messages postés lundi 23 avril 2007Date d'inscription 15 décembre 2016 Dernière intervention - 30 mars 2011 à 20:15 - Dernière réponse : nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention
- 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!!!
Afficher la suite 

7 réponses

Répondre au sujet
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 31 mars 2011 à 12:39
+3
Utile
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.

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
Jayme65 64 Messages postés lundi 23 avril 2007Date d'inscription 15 décembre 2016 Dernière intervention - 31 mars 2011 à 13:09
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Jayme65
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 30 mars 2011 à 21:21
0
Utile
Bonjour,

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

Commenter la réponse de NHenry
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 30 mars 2011 à 21:45
0
Utile
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
Commenter la réponse de nhervagault
Jayme65 64 Messages postés lundi 23 avril 2007Date d'inscription 15 décembre 2016 Dernière intervention - 31 mars 2011 à 00:00
0
Utile
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)
Commenter la réponse de Jayme65
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 31 mars 2011 à 13:26
0
Utile
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.

Commenter la réponse de NHenry
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 31 mars 2011 à 15:28
0
Utile
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)
Commenter la réponse de nhervagault

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.