Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Re: array ou tableau multi pour faire un trie. je narrive pas !!!

4 réponses
Avatar
Pas de Spam
ps:ce message semble ne pas etre partie donc je le re mail desoler si il
apparait deux fois

"Pas de Spam" <i@i.i> a écrit dans le message de news:...
> j'ai oublier de dire que c'etait volontaire l'ecrasement de la variable tt
> car une fois enregistre avec le add je n'en avais plus besoins
>
> "Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le
message
> de news:OljesjaoEHA.2864@TK2MSFTNGP12.phx.gbl...
> > Bonsoir,
> >
> > > t(0)="boknior"
> > > t(1)=12
> > > t(2)=25.4
> > > t(3)=5
> > > t(4)=3.4
> > > myarr.add(t)
> > > t(0)="aaaa"
> > > t(1)=5
> > > t(2)=5.4
> > > t(3)=54
> > > t(4)=3
> > > myarr.add(t)
> > >
> > > myarr.sort
> > >
> > > mais dans myarr il y a deux fois "aaaa" et mon "boknior" avec c'est
> valeur
> > a
> > > disparue....
> >
> > Le problème de ce code est que vous n'avez qu'un seul tableau, et que la
> > seconde partie des affectations écrase la première. Il vous manque un t
=
> > new object(4) aprés le premier Add(). Ca fonctionnera, reste que ce
n'est
> > pas trés propre. Au lieu d'un tableau d'object, il vous faudrait une
> classe
> > avec des propriétés correctement définies (ce que vous a montré Eric
> > Guillemette), et au lieu d'un ArrayList il faudrait une collection
> fortement
> > typée. Mais ça c'est la seconde étape.
> >
> > Bon courage,
> >
> > --
> > Zazar
> >
> >
>
>

4 réponses

Avatar
Zazar
Bonjour,

> j'ai oublier de dire que c'etait volontaire l'ecrasement de la variable


tt
> car une fois enregistre avec le add je n'en avais plus besoins



Dans ce cas, vous avez volontairement fait une erreur :).

Si vous avez un objet de type tableau :
dim t as new object(4)

et que vous ajoutez cet objet à une collection:
dim list as new ArrayList()
list.add(t)

Alors la collection ne contient pas une copie du tableau mais une référence
vers ce tableau. Toute modification sur le tableau sera répercutée sur
l'élément de la collection :
dim t as new object(4)
t(0) = "bonjour"
dim list as new ArrayList()
list.add(t)
t(0) = "bonsoir"
Console.WriteLine(ctype(list(0), object())(0))

Ce code va afficher bonsoir.
Vous ne pouvez donc pas vous contenter d'écraser le tableau.

mais tu me parle de collection typé tu peux m'en dire un peu plus ou alors
me rediriger sur un exemple pour que je puisse voir de ce que tu me parle



Vous pouvez commencer par : http://www.c2i.fr/code.aspx?IDCode89

--
Zazar
Avatar
Pas de Spam
> Alors la collection ne contient pas une copie du tableau mais une


référence
vers ce tableau. Toute modification sur le tableau sera répercutée sur
l'élément de la collection :



oui et c'est bien la mon probleme ;-)...... car je ne pensait pas qu'il
fesait liens avec la reference!!!

> mais tu me parle de collection typé tu peux m'en dire un peu plus ou


alors
> me rediriger sur un exemple pour que je puisse voir de ce que tu me


parle

Vous pouvez commencer par : http://www.c2i.fr/code.aspx?IDCode89



oui merci c'est le code que je regarde depuis ce matin mais ca ne marche pas
pour l'instant !!!
car j'ai pas le trie mais j'essais d'adapter vers un array ou voir le code
de eric mais pour l'instant ca marche pas avec le collectionbase
..............



voici mon bout de code


Public Class mercu
Inherits System.Collections.CollectionBase
Public produit As String
Public lundi As Single
Public mardi As Single
Public mercredi As Single
Public jeudi As Single

Public Sub add(ByVal mercua As mercu)
Me.List.Add(mercua)
End Sub

Public Sub add1(ByVal produit As String, ByVal lundi As Single, ByVal
mardi As Single, ByVal mercredi As Single, ByVal jeudi As Single)
Dim mer As New mercu()
mer.produit = produit
mer.lundi = lundi
mer.mardi = mardi
mer.mercredi = mercredi
mer.jeudi = jeudi
add(mer)
End Sub
End Class



Private Sub test
Dim er As mercu
er.add1("ail", 12, 4, 5, 3)
er.add1("zzzail", 12, 4, 5, 3)
er.add1("aaa", 12, 4, 5, 3)
MsgBox(er.Count)
' ici il me faudrait er.sort

End Sub

dommage que j'arrive pas a faire marcher le code de eric
en topus les cas je suis toujours preneur d'aide....

merci a tous
fabrice
Avatar
Zazar
Bonsoir,

oui merci c'est le code que je regarde depuis ce matin mais ca ne marche


pas
pour l'instant !!!
car j'ai pas le trie mais j'essais d'adapter vers un array ou voir le code
de eric mais pour l'instant ca marche pas avec le collectionbase


Quand vous dîtes "ça ne marche pas", ça veut dire quoi : il vous manque
juste le tri ? ça ne fait pas du tout ce que vous voulez ? ça ne compile
même pas ? ..


Public Class mercu
Inherits System.Collections.CollectionBase
Public produit As String



Remarque 1 qui n'a rien à voir avec votre problème : quand on utilise le
stype single, il faut qu'il y ait de bonnes raisons derrière. Dans la
plupart des cas, un type double ou decimal est plus adapté.
Remarque 2 qui n'a rien à voir avec votre problème : utilisez les
propriétés.
Public lundi As Single
Public mardi As Single
Public mercredi As Single
Public jeudi As Single

Public Sub add(ByVal mercua As mercu)
Me.List.Add(mercua)
End Sub

Public Sub add1(ByVal produit As String, ByVal lundi As Single, ByVal
mardi As Single, ByVal mercredi As Single, ByVal jeudi As Single)
Dim mer As New mercu()
mer.produit = produit
mer.lundi = lundi
mer.mardi = mardi
mer.mercredi = mercredi
mer.jeudi = jeudi
add(mer)
End Sub
End Class



Là il y a un peu confusion. Vous devez créer deux classes.
La classe Mercu et la classe MercuCollection. La classe Mercu représente un
des éléments que vous manipulez, la classe MercuCollection (qui hérite de
CollectionBase) représente la collection fortement typée.
La classe Mercu contient vos propriété lundi, mardi, ....
La classe MercuCollection fournit les méthodes de manipulation de la
collection (add, insert, ...). Ces méthodes doivent toutes prendres un
paramètre de type Mercu. Pas besoin d'implémenter la méthode Add(ByVal
produit As String, ByVal lundi As Single, ...), mais aucune
contre-indication si vous estimez en avoir besoin. Par contre réflechissez à
l'éventualité d'implémenter un constructeur à Mercu acceptant tous ces
paramètres.

Une fois que vous aurez votre jolie collection, passons au tri. Faîtes
implémenter l'interface IComparable par la classe Mercu (si vous rencontrez
à nouveau le problème que vous décriviez à Eric Guillemette, montrez nous
votre code), et implémenter la méthode CompareTo. (Ne pas oublier que
produit peut potentiellement valoir nothing). Une fois que ceci est fait,
vous rajouter par exemple une méthode Sort à la classe MercuCollection.
Cette méthode devra trier l'ArrayList contenu en interne dans la collection
(Propriété InnerList). Pour le tri, l'arryList possède lui aussi une méthode
Sort.

Bon courage,

--
Zazar
Avatar
Pas de Spam
> > Public Class mercu
> Inherits System.Collections.CollectionBase
> Public produit As String

Remarque 1 qui n'a rien à voir avec votre problème : quand on utilise le
stype single, il faut qu'il y ait de bonnes raisons derrière. Dans la



effectivement mais j'ai encore besoins dans mon code de single pour
l'instant apres je pourrais passer vers decimal dans mon code final quand
j'aurais modifier certain type.....
mais je note qu'il vaut mieux eviter l' utilisation de single


pour le reste ca deviens un peu confus pour moi donc je vais attendre demain
matin pour essayer de mieux comprendre.......

mais j'avais fait ce bout de code en m'inspirant des explication de richard
clak (c2i) ou lui il avais une seule class mais comme je dis je regarde ca
demain et vous tiens au courant de mes avances

merci
fabrice

Là il y a un peu confusion. Vous devez créer deux classes.
La classe Mercu et la classe MercuCollection. La classe Mercu représente


un
des éléments que vous manipulez, la classe MercuCollection (qui hérite de
CollectionBase) représente la collection fortement typée.
La classe Mercu contient vos propriété lundi, mardi, ....
La classe MercuCollection fournit les méthodes de manipulation de la
collection (add, insert, ...). Ces méthodes doivent toutes prendres un
paramètre de type Mercu. Pas besoin d'implémenter la méthode Add(ByVal
produit As String, ByVal lundi As Single, ...), mais aucune
contre-indication si vous estimez en avoir besoin. Par contre réflechissez


à
l'éventualité d'implémenter un constructeur à Mercu acceptant tous ces
paramètres.

Une fois que vous aurez votre jolie collection, passons au tri. Faîtes
implémenter l'interface IComparable par la classe Mercu (si vous


rencontrez
à nouveau le problème que vous décriviez à Eric Guillemette, montrez nous
votre code), et implémenter la méthode CompareTo. (Ne pas oublier que
produit peut potentiellement valoir nothing). Une fois que ceci est fait,
vous rajouter par exemple une méthode Sort à la classe MercuCollection.
Cette méthode devra trier l'ArrayList contenu en interne dans la


collection
(Propriété InnerList). Pour le tri, l'arryList possède lui aussi une


méthode
Sort.

Bon courage,

--
Zazar