Re: array ou tableau multi pour faire un trie. je narrive pas !!!
4 réponses
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
> >
> >
>
>
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
> 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
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
> 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....
> 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
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
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.
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
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
> > 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
> > 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