supression des doublon dans un arraylist avec cumule des valeur de ce doublon
8 réponses
Pas de Spam
bonjour j'ai crée un arraylist dont les éléments sont des
structures (string,val1,val2,val3,val4) pour plus d'info de ma structure
c'est une modif de ce code
http://groups.google.fr/groups?hl=fr&lr=&cr=countryFR&ie=UTF-8&selm=%23K%241fOXoEHA.868%40TK2MSFTNGP10.phx.gbl
j'aimerais pouvoir supprimer les doublons mais en gardant les vals cumuler
au doublon
un exemple:
ligne mon arraylist contient
1er ligne "bonjour",12,5,3,2
2eme 'bonjour",5,3,2,0
ect.....
j'aimerais obtenir une seule ligne du style
"bonjour",17,8,5,2
addition des values puis suppression de la ligne de doublon
j'envisage de faire un struc du style comme le code qui suit avec les
enumerator
mais ne voudrait il pas mieux faire une copy de l'arraylist puis traiter
ligne par ligne avec une boucle
for next
comment revenir en arrière dans la boucle pour modifier la ligne précédente
et insérer les nouvelle value
avant d'effacer le doublon ?? enfin plein de question qui restent sans
réponses
Public sub doublon (myArr As Arraylist)
Dim myEnumerator As System.Collections.IEnumerator = _
myArr.GetEnumerator()
'bounle pour suppression de mes doublon ...while myEnumerator.MoveNext()
Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
End Whileend subbon en bref je ne sais comment faire avez vous une
idée ou un bout de code...merci a tousFabrice
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
Pas de Spam
je viens de trouver 'interface ICloneable'
Méthode Margins.Clone Extrait un doublon de cet objet, membre par membre.
Public Overridable Function Clone() As Object Implements _ ICloneable.Clone
peut être un début de piste si quelqu'un a des infos la dessus
"Pas de Spam" a écrit dans le message de news: %
bonjour j'ai crée un arraylist dont les éléments sont des structures (string,val1,val2,val3,val4) pour plus d'info de ma structure c'est une modif de ce code
Fabrice
je viens de trouver 'interface ICloneable'
Méthode Margins.Clone
Extrait un doublon de cet objet, membre par membre.
Public Overridable Function Clone() As Object Implements _
ICloneable.Clone
peut être un début de piste
si quelqu'un a des infos la dessus
"Pas de Spam" <i@i.i> a écrit dans le message de news:
%23ApzMsSpEHA.2032@TK2MSFTNGP10.phx.gbl...
bonjour j'ai crée un arraylist dont les éléments sont des
structures (string,val1,val2,val3,val4) pour plus d'info de ma structure
c'est une modif de ce code
Méthode Margins.Clone Extrait un doublon de cet objet, membre par membre.
Public Overridable Function Clone() As Object Implements _ ICloneable.Clone
peut être un début de piste si quelqu'un a des infos la dessus
"Pas de Spam" a écrit dans le message de news: %
bonjour j'ai crée un arraylist dont les éléments sont des structures (string,val1,val2,val3,val4) pour plus d'info de ma structure c'est une modif de ce code
Fabrice
Zazar
Bonjour,
bonjour j'ai crée un arraylist dont les éléments sont des structures (string,val1,val2,val3,val4) pour plus d'info de ma structure c'est une modif de ce code
j'aimerais pouvoir supprimer les doublons mais en gardant les vals cumuler au doublon un exemple:
ligne mon arraylist contient 1er ligne "bonjour",12,5,3,2 2eme 'bonjour",5,3,2,0 ect.....
j'aimerais obtenir une seule ligne du style "bonjour",17,8,5,2
addition des values puis suppression de la ligne de doublon
AMA, le plus simple c'est de créer un nouvel ArrayList, de parcourir le premier et pour chaque élément : vérifier si l'élément existe dans le nouvel arraylist : si non : l'ajouter au nouvel arraylist, si oui : cumulez les valeurs. Je vous laisse faire l'implémentation, si vous avez des difficultés, postez votre code ici. Ensuite une fois que ce sera fait, on pourrait si nécessaire envisager une optimisation en utilisant une table de hachage par exemple.
Bon courage,
-- Zazar
Bonjour,
bonjour j'ai crée un arraylist dont les éléments sont des
structures (string,val1,val2,val3,val4) pour plus d'info de ma structure
c'est une modif de ce code
j'aimerais pouvoir supprimer les doublons mais en gardant les vals cumuler
au doublon
un exemple:
ligne mon arraylist contient
1er ligne "bonjour",12,5,3,2
2eme 'bonjour",5,3,2,0
ect.....
j'aimerais obtenir une seule ligne du style
"bonjour",17,8,5,2
addition des values puis suppression de la ligne de doublon
AMA, le plus simple c'est de créer un nouvel ArrayList, de parcourir le
premier et pour chaque élément : vérifier si l'élément existe dans le nouvel
arraylist : si non : l'ajouter au nouvel arraylist, si oui : cumulez les
valeurs.
Je vous laisse faire l'implémentation, si vous avez des difficultés, postez
votre code ici.
Ensuite une fois que ce sera fait, on pourrait si nécessaire envisager une
optimisation en utilisant une table de hachage par exemple.
bonjour j'ai crée un arraylist dont les éléments sont des structures (string,val1,val2,val3,val4) pour plus d'info de ma structure c'est une modif de ce code
j'aimerais pouvoir supprimer les doublons mais en gardant les vals cumuler au doublon un exemple:
ligne mon arraylist contient 1er ligne "bonjour",12,5,3,2 2eme 'bonjour",5,3,2,0 ect.....
j'aimerais obtenir une seule ligne du style "bonjour",17,8,5,2
addition des values puis suppression de la ligne de doublon
AMA, le plus simple c'est de créer un nouvel ArrayList, de parcourir le premier et pour chaque élément : vérifier si l'élément existe dans le nouvel arraylist : si non : l'ajouter au nouvel arraylist, si oui : cumulez les valeurs. Je vous laisse faire l'implémentation, si vous avez des difficultés, postez votre code ici. Ensuite une fois que ce sera fait, on pourrait si nécessaire envisager une optimisation en utilisant une table de hachage par exemple.
Bon courage,
-- Zazar
Pas de Spam
bonjour,
effectivement c'est le principe que j'ai utiliser mais pas le code sous la main donc je le poste des que je peux
après avoir fait un trie je parcoure le arraylist en comparant item n et item n+1 si identique addition des valeurs si différent création de la ligne n-1 avec les valeur a jour
enfin bref le code parlera de lui même
merci zazar
AMA, le plus simple c'est de créer un nouvel ArrayList, de parcourir le premier et pour chaque élément : vérifier si l'élément existe dans le nouvel arraylist : si non : l'ajouter au nouvel arraylist, si oui : cumulez les valeurs. Je vous laisse faire l'implémentation, si vous avez des difficultés, postez votre code ici. Ensuite une fois que ce sera fait, on pourrait si nécessaire envisager une optimisation en utilisant une table de hachage par exemple.
Bon courage,
-- Zazar
bonjour,
effectivement c'est le principe que j'ai utiliser mais pas le code sous la
main
donc je le poste des que je peux
après avoir fait un trie
je parcoure le arraylist en comparant item n et item n+1
si identique addition des valeurs
si différent création de la ligne n-1 avec les valeur a jour
enfin bref le code parlera de lui même
merci zazar
AMA, le plus simple c'est de créer un nouvel ArrayList, de parcourir le
premier et pour chaque élément : vérifier si l'élément existe dans le
nouvel
arraylist : si non : l'ajouter au nouvel arraylist, si oui : cumulez les
valeurs.
Je vous laisse faire l'implémentation, si vous avez des difficultés,
postez
votre code ici.
Ensuite une fois que ce sera fait, on pourrait si nécessaire envisager une
optimisation en utilisant une table de hachage par exemple.
effectivement c'est le principe que j'ai utiliser mais pas le code sous la main donc je le poste des que je peux
après avoir fait un trie je parcoure le arraylist en comparant item n et item n+1 si identique addition des valeurs si différent création de la ligne n-1 avec les valeur a jour
enfin bref le code parlera de lui même
merci zazar
AMA, le plus simple c'est de créer un nouvel ArrayList, de parcourir le premier et pour chaque élément : vérifier si l'élément existe dans le nouvel arraylist : si non : l'ajouter au nouvel arraylist, si oui : cumulez les valeurs. Je vous laisse faire l'implémentation, si vous avez des difficultés, postez votre code ici. Ensuite une fois que ce sera fait, on pourrait si nécessaire envisager une optimisation en utilisant une table de hachage par exemple.
Bon courage,
-- Zazar
Pas de Spam
ok voila mon code
je vous ai extrait les parties qui nous interresse
la class suivie de la fonction d'une form la class c'est juste pour archive pour ceux qui veule implementer un tri
Public Class ArrayListItem
Implements IComparable
Private _produit As String Private _Lundi As Single Private _Mardi As Single Private _Mercredi As Single Private _Jeudi As Single
Public ReadOnly Property produit() As String Get Return _produit End Get End Property Public ReadOnly Property Lundi() As Single Get Return _Lundi End Get End Property
Public ReadOnly Property Mardi() As Single Get Return _Mardi End Get End Property
Public ReadOnly Property Mercredi() As Single Get Return _Mercredi End Get End Property
Public ReadOnly Property Jeudi() As Single Get Return _Jeudi End Get End Property
Public Sub New(ByVal s As String, ByVal i As Single, ByVal j As Single, ByVal k As Single, ByVal l As Single) _produit = s _Lundi = i _Mardi = j _Mercredi = k _Jeudi = l End Sub
Public Function CompareTo(ByVal obj As Object) As Integer _ Implements System.IComparable.CompareTo If obj.GetType Is GetType(ArrayListItem) Then Return _produit.CompareTo(DirectCast(obj, ArrayListItem).produit) End If Return 0 End Function
End Class
'la fonction
Dim e, f, g, h As Single
Dim arr As New ArrayList() Dim arrcopy As New ArrayList() Dim arrint As ArrayListItem
Dim myEnumerator As System.Collections.IEnumerator = _ arr.GetEnumerator() myEnumerator.MoveNext() 'serie1 arrint = myEnumerator.Current '
e = arrint.Lundi 'pour permettre une memorisation de la premiere ligne f = arrint.Mardi ' g = arrint.Mercredi ' h = arrint.Jeudi ' old = arrint.produit '
While myEnumerator.MoveNext() arrint = myEnumerator.Current
If arrint.produit <> old Then arrcopy.Add(New ArrayListItem(old, e, f, g, h)) e = 0 f = 0 g = 0 h = 0 End If
e = e + arrint.Lundi f = f + arrint.Mardi g = g + arrint.Mercredi h = h + arrint.Jeudi old = arrint.produit
End While
arrcopy.Add(New ArrayListItem(old, e, f, g, h)) 'ligne 2 pour ecrire la dernier ligne du arrcopy
DataGrid1.DataSource = arrcopy
bon et bien voila pas tres jolie comme code mais ca marche!!
si vous avez une solution pour eviter la serie1 et ligne 2
autre chose aussi comment dans mon datagridtabelstyle/gridcolunstyle definir un mappingname car dans mon array list il n'y a pas de table et mon datagrid me sort pas les bonne colune
je sais definir la mise en page de mon datagrid avec des BD mais la je ne sais comment faire avec le arraylist c'est la premiere ligne qui donne le nom des collones ???
enfin bref ok pour optimisation -> zazar si tu as une idee
ok voila mon code
je vous ai extrait les parties qui nous interresse
la class suivie de la fonction d'une form
la class c'est juste pour archive pour ceux qui veule implementer un tri
Public Class ArrayListItem
Implements IComparable
Private _produit As String
Private _Lundi As Single
Private _Mardi As Single
Private _Mercredi As Single
Private _Jeudi As Single
Public ReadOnly Property produit() As String
Get
Return _produit
End Get
End Property
Public ReadOnly Property Lundi() As Single
Get
Return _Lundi
End Get
End Property
Public ReadOnly Property Mardi() As Single
Get
Return _Mardi
End Get
End Property
Public ReadOnly Property Mercredi() As Single
Get
Return _Mercredi
End Get
End Property
Public ReadOnly Property Jeudi() As Single
Get
Return _Jeudi
End Get
End Property
Public Sub New(ByVal s As String, ByVal i As Single, ByVal j As Single,
ByVal k As Single, ByVal l As Single)
_produit = s
_Lundi = i
_Mardi = j
_Mercredi = k
_Jeudi = l
End Sub
Public Function CompareTo(ByVal obj As Object) As Integer _
Implements System.IComparable.CompareTo
If obj.GetType Is GetType(ArrayListItem) Then
Return _produit.CompareTo(DirectCast(obj,
ArrayListItem).produit)
End If
Return 0
End Function
End Class
'la fonction
Dim e, f, g, h As Single
Dim arr As New ArrayList()
Dim arrcopy As New ArrayList()
Dim arrint As ArrayListItem
Dim myEnumerator As System.Collections.IEnumerator = _
arr.GetEnumerator()
myEnumerator.MoveNext() 'serie1
arrint = myEnumerator.Current '
e = arrint.Lundi 'pour permettre une memorisation de la premiere
ligne
f = arrint.Mardi '
g = arrint.Mercredi '
h = arrint.Jeudi '
old = arrint.produit '
While myEnumerator.MoveNext()
arrint = myEnumerator.Current
If arrint.produit <> old Then
arrcopy.Add(New ArrayListItem(old, e, f, g, h))
e = 0
f = 0
g = 0
h = 0
End If
e = e + arrint.Lundi
f = f + arrint.Mardi
g = g + arrint.Mercredi
h = h + arrint.Jeudi
old = arrint.produit
End While
arrcopy.Add(New ArrayListItem(old, e, f, g, h)) 'ligne 2 pour
ecrire la dernier ligne du arrcopy
DataGrid1.DataSource = arrcopy
bon et bien voila pas tres jolie comme code mais ca marche!!
si vous avez une solution pour eviter la serie1 et ligne 2
autre chose aussi comment dans mon datagridtabelstyle/gridcolunstyle definir
un mappingname car dans mon array list il n'y a pas de table et mon datagrid
me sort pas les bonne colune
je sais definir la mise en page de mon datagrid avec des BD mais la je ne
sais comment faire avec le arraylist
c'est la premiere ligne qui donne le nom des collones ???
enfin bref ok pour optimisation -> zazar si tu as une idee
je vous ai extrait les parties qui nous interresse
la class suivie de la fonction d'une form la class c'est juste pour archive pour ceux qui veule implementer un tri
Public Class ArrayListItem
Implements IComparable
Private _produit As String Private _Lundi As Single Private _Mardi As Single Private _Mercredi As Single Private _Jeudi As Single
Public ReadOnly Property produit() As String Get Return _produit End Get End Property Public ReadOnly Property Lundi() As Single Get Return _Lundi End Get End Property
Public ReadOnly Property Mardi() As Single Get Return _Mardi End Get End Property
Public ReadOnly Property Mercredi() As Single Get Return _Mercredi End Get End Property
Public ReadOnly Property Jeudi() As Single Get Return _Jeudi End Get End Property
Public Sub New(ByVal s As String, ByVal i As Single, ByVal j As Single, ByVal k As Single, ByVal l As Single) _produit = s _Lundi = i _Mardi = j _Mercredi = k _Jeudi = l End Sub
Public Function CompareTo(ByVal obj As Object) As Integer _ Implements System.IComparable.CompareTo If obj.GetType Is GetType(ArrayListItem) Then Return _produit.CompareTo(DirectCast(obj, ArrayListItem).produit) End If Return 0 End Function
End Class
'la fonction
Dim e, f, g, h As Single
Dim arr As New ArrayList() Dim arrcopy As New ArrayList() Dim arrint As ArrayListItem
Dim myEnumerator As System.Collections.IEnumerator = _ arr.GetEnumerator() myEnumerator.MoveNext() 'serie1 arrint = myEnumerator.Current '
e = arrint.Lundi 'pour permettre une memorisation de la premiere ligne f = arrint.Mardi ' g = arrint.Mercredi ' h = arrint.Jeudi ' old = arrint.produit '
While myEnumerator.MoveNext() arrint = myEnumerator.Current
If arrint.produit <> old Then arrcopy.Add(New ArrayListItem(old, e, f, g, h)) e = 0 f = 0 g = 0 h = 0 End If
e = e + arrint.Lundi f = f + arrint.Mardi g = g + arrint.Mercredi h = h + arrint.Jeudi old = arrint.produit
End While
arrcopy.Add(New ArrayListItem(old, e, f, g, h)) 'ligne 2 pour ecrire la dernier ligne du arrcopy
DataGrid1.DataSource = arrcopy
bon et bien voila pas tres jolie comme code mais ca marche!!
si vous avez une solution pour eviter la serie1 et ligne 2
autre chose aussi comment dans mon datagridtabelstyle/gridcolunstyle definir un mappingname car dans mon array list il n'y a pas de table et mon datagrid me sort pas les bonne colune
je sais definir la mise en page de mon datagrid avec des BD mais la je ne sais comment faire avec le arraylist c'est la premiere ligne qui donne le nom des collones ???
enfin bref ok pour optimisation -> zazar si tu as une idee
Zazar
> Public Class ArrayListItem
Implements IComparable
(snip)
Public Sub New(ByVal s As String, ByVal i As Single, ByVal j As
Single,
ByVal k As Single, ByVal l As Single) _produit = s _Lundi = i _Mardi = j _Mercredi = k _Jeudi = l End Sub
Public Function CompareTo(ByVal obj As Object) As Integer _ Implements System.IComparable.CompareTo If obj.GetType Is GetType(ArrayListItem) Then Return _produit.CompareTo(DirectCast(obj, ArrayListItem).produit)
Attention : si produit vaut nothing, vous allez avoir une exception. Si nothing est une valeur interdite pour produit, faîtes un test dans le constructeur et levez une ArgumentException si nécessaire.
End If Return 0
Dans le cas où on essaie de comparer un ArrayListItem à un Poireau, on s'attend à trouver une erreur pas à découvrir qu'ils sont égaux :).
End Function
End Class
'la fonction
Dim e, f, g, h As Single
Utilisez des noms de variables explicites!
Dim arr As New ArrayList() Dim arrcopy As New ArrayList() Dim arrint As ArrayListItem
Dim myEnumerator As System.Collections.IEnumerator = _ arr.GetEnumerator() myEnumerator.MoveNext() 'serie1
Testez quand même le résultat, si votre fonction doit travailler sur un ArrayList, elle ne doit pas planter
arrint = myEnumerator.Current '
Si la ligne ci-dessus compile, c'est que vous n'utilisez pas option strict : c'est une trés mauvaise habitude.
e = arrint.Lundi 'pour permettre une memorisation de la premiere ligne f = arrint.Mardi ' g = arrint.Mercredi ' h = arrint.Jeudi ' old = arrint.produit '
While myEnumerator.MoveNext() arrint = myEnumerator.Current
If arrint.produit <> old Then arrcopy.Add(New ArrayListItem(old, e, f, g, h)) e = 0 f = 0 g = 0 h = 0 End If
e = e + arrint.Lundi f = f + arrint.Mardi g = g + arrint.Mercredi h = h + arrint.Jeudi old = arrint.produit
cette dernière ligne pourrait être mise dans un Else du bloc if précédent.
End While
arrcopy.Add(New ArrayListItem(old, e, f, g, h)) 'ligne 2 pour ecrire la dernier ligne du arrcopy
DataGrid1.DataSource = arrcopy
bon et bien voila pas tres jolie comme code mais ca marche!!
si vous avez une solution pour eviter la serie1 et ligne 2
C'est améliorable mais pas si moche que ça : -> au lieu de travailler sur un old, e, f, g et h, travaillez avec un oldArrayListItem (au passage le nom de la classe ne me semble pas avoir été choisi judicieusement) initialisé à nothing -> ne faîtes pas de cas particulier au début, dans votre boucle il suffit de tester si oldArrayListItem vaut nothing ou s'il vaut quelque chose -> n'ajoutez pas le viel élément dans la copie, mais ajoutez le nouveau ->postez la nouvelle version de votre code
autre chose aussi comment dans mon datagridtabelstyle/gridcolunstyle
definir
un mappingname car dans mon array list il n'y a pas de table et mon
datagrid
me sort pas les bonne colune
je sais definir la mise en page de mon datagrid avec des BD mais la je ne sais comment faire avec le arraylist c'est la premiere ligne qui donne le nom des collones ???
Vous êtes en ASP.NET ou en Windows Forms ?
enfin bref ok pour optimisation -> zazar si tu as une idee
Ca va dépendre des contraintes : le résultat doit-il être trié ou non ? Mais en gros l'idée, c'est -> ne pas faire de tri au début -> au lieu d'utiliser un arraylist en destination, utiliser une table de hachage dont la clef est la propriété produit et la valeur l'item correspondant.
Mais ça n'a d'intérêt (point de vue performances, aprés il reste l'intérêt pédagogique) que si vous manipulez beaucoup d'éléments.
-- Zazar
> Public Class ArrayListItem
Implements IComparable
(snip)
Public Sub New(ByVal s As String, ByVal i As Single, ByVal j As
Single,
ByVal k As Single, ByVal l As Single)
_produit = s
_Lundi = i
_Mardi = j
_Mercredi = k
_Jeudi = l
End Sub
Public Function CompareTo(ByVal obj As Object) As Integer _
Implements System.IComparable.CompareTo
If obj.GetType Is GetType(ArrayListItem) Then
Return _produit.CompareTo(DirectCast(obj,
ArrayListItem).produit)
Attention : si produit vaut nothing, vous allez avoir une exception. Si
nothing est une valeur interdite pour produit, faîtes un test dans le
constructeur et levez une ArgumentException si nécessaire.
End If
Return 0
Dans le cas où on essaie de comparer un ArrayListItem à un Poireau, on
s'attend à trouver une erreur pas à découvrir qu'ils sont égaux :).
End Function
End Class
'la fonction
Dim e, f, g, h As Single
Utilisez des noms de variables explicites!
Dim arr As New ArrayList()
Dim arrcopy As New ArrayList()
Dim arrint As ArrayListItem
Dim myEnumerator As System.Collections.IEnumerator = _
arr.GetEnumerator()
myEnumerator.MoveNext() 'serie1
Testez quand même le résultat, si votre fonction doit travailler sur un
ArrayList, elle ne doit pas planter
arrint = myEnumerator.Current '
Si la ligne ci-dessus compile, c'est que vous n'utilisez pas option strict :
c'est une trés mauvaise habitude.
e = arrint.Lundi 'pour permettre une memorisation de la premiere
ligne
f = arrint.Mardi '
g = arrint.Mercredi '
h = arrint.Jeudi '
old = arrint.produit '
While myEnumerator.MoveNext()
arrint = myEnumerator.Current
If arrint.produit <> old Then
arrcopy.Add(New ArrayListItem(old, e, f, g, h))
e = 0
f = 0
g = 0
h = 0
End If
e = e + arrint.Lundi
f = f + arrint.Mardi
g = g + arrint.Mercredi
h = h + arrint.Jeudi
old = arrint.produit
cette dernière ligne pourrait être mise dans un Else du bloc if précédent.
End While
arrcopy.Add(New ArrayListItem(old, e, f, g, h)) 'ligne 2 pour
ecrire la dernier ligne du arrcopy
DataGrid1.DataSource = arrcopy
bon et bien voila pas tres jolie comme code mais ca marche!!
si vous avez une solution pour eviter la serie1 et ligne 2
C'est améliorable mais pas si moche que ça :
-> au lieu de travailler sur un old, e, f, g et h, travaillez avec un
oldArrayListItem (au passage le nom de la classe ne me semble pas avoir été
choisi judicieusement) initialisé à nothing
-> ne faîtes pas de cas particulier au début, dans votre boucle il suffit de
tester si oldArrayListItem vaut nothing ou s'il vaut quelque chose
-> n'ajoutez pas le viel élément dans la copie, mais ajoutez le nouveau
->postez la nouvelle version de votre code
autre chose aussi comment dans mon datagridtabelstyle/gridcolunstyle
definir
un mappingname car dans mon array list il n'y a pas de table et mon
datagrid
me sort pas les bonne colune
je sais definir la mise en page de mon datagrid avec des BD mais la je ne
sais comment faire avec le arraylist
c'est la premiere ligne qui donne le nom des collones ???
Vous êtes en ASP.NET ou en Windows Forms ?
enfin bref ok pour optimisation -> zazar si tu as une idee
Ca va dépendre des contraintes : le résultat doit-il être trié ou non ?
Mais en gros l'idée, c'est
-> ne pas faire de tri au début
-> au lieu d'utiliser un arraylist en destination, utiliser une table de
hachage dont la clef est la propriété produit et la valeur l'item
correspondant.
Mais ça n'a d'intérêt (point de vue performances, aprés il reste l'intérêt
pédagogique) que si vous manipulez beaucoup d'éléments.
Public Sub New(ByVal s As String, ByVal i As Single, ByVal j As
Single,
ByVal k As Single, ByVal l As Single) _produit = s _Lundi = i _Mardi = j _Mercredi = k _Jeudi = l End Sub
Public Function CompareTo(ByVal obj As Object) As Integer _ Implements System.IComparable.CompareTo If obj.GetType Is GetType(ArrayListItem) Then Return _produit.CompareTo(DirectCast(obj, ArrayListItem).produit)
Attention : si produit vaut nothing, vous allez avoir une exception. Si nothing est une valeur interdite pour produit, faîtes un test dans le constructeur et levez une ArgumentException si nécessaire.
End If Return 0
Dans le cas où on essaie de comparer un ArrayListItem à un Poireau, on s'attend à trouver une erreur pas à découvrir qu'ils sont égaux :).
End Function
End Class
'la fonction
Dim e, f, g, h As Single
Utilisez des noms de variables explicites!
Dim arr As New ArrayList() Dim arrcopy As New ArrayList() Dim arrint As ArrayListItem
Dim myEnumerator As System.Collections.IEnumerator = _ arr.GetEnumerator() myEnumerator.MoveNext() 'serie1
Testez quand même le résultat, si votre fonction doit travailler sur un ArrayList, elle ne doit pas planter
arrint = myEnumerator.Current '
Si la ligne ci-dessus compile, c'est que vous n'utilisez pas option strict : c'est une trés mauvaise habitude.
e = arrint.Lundi 'pour permettre une memorisation de la premiere ligne f = arrint.Mardi ' g = arrint.Mercredi ' h = arrint.Jeudi ' old = arrint.produit '
While myEnumerator.MoveNext() arrint = myEnumerator.Current
If arrint.produit <> old Then arrcopy.Add(New ArrayListItem(old, e, f, g, h)) e = 0 f = 0 g = 0 h = 0 End If
e = e + arrint.Lundi f = f + arrint.Mardi g = g + arrint.Mercredi h = h + arrint.Jeudi old = arrint.produit
cette dernière ligne pourrait être mise dans un Else du bloc if précédent.
End While
arrcopy.Add(New ArrayListItem(old, e, f, g, h)) 'ligne 2 pour ecrire la dernier ligne du arrcopy
DataGrid1.DataSource = arrcopy
bon et bien voila pas tres jolie comme code mais ca marche!!
si vous avez une solution pour eviter la serie1 et ligne 2
C'est améliorable mais pas si moche que ça : -> au lieu de travailler sur un old, e, f, g et h, travaillez avec un oldArrayListItem (au passage le nom de la classe ne me semble pas avoir été choisi judicieusement) initialisé à nothing -> ne faîtes pas de cas particulier au début, dans votre boucle il suffit de tester si oldArrayListItem vaut nothing ou s'il vaut quelque chose -> n'ajoutez pas le viel élément dans la copie, mais ajoutez le nouveau ->postez la nouvelle version de votre code
autre chose aussi comment dans mon datagridtabelstyle/gridcolunstyle
definir
un mappingname car dans mon array list il n'y a pas de table et mon
datagrid
me sort pas les bonne colune
je sais definir la mise en page de mon datagrid avec des BD mais la je ne sais comment faire avec le arraylist c'est la premiere ligne qui donne le nom des collones ???
Vous êtes en ASP.NET ou en Windows Forms ?
enfin bref ok pour optimisation -> zazar si tu as une idee
Ca va dépendre des contraintes : le résultat doit-il être trié ou non ? Mais en gros l'idée, c'est -> ne pas faire de tri au début -> au lieu d'utiliser un arraylist en destination, utiliser une table de hachage dont la clef est la propriété produit et la valeur l'item correspondant.
Mais ça n'a d'intérêt (point de vue performances, aprés il reste l'intérêt pédagogique) que si vous manipulez beaucoup d'éléments.
-- Zazar
Pas de Spam
ok merci pour les commentaires ;-)
je sais definir la mise en page de mon datagrid avec des BD mais la je ne sais comment faire avec le arraylist c'est la premiere ligne qui donne le nom des collones ???
Vous êtes en ASP.NET ou en Windows Forms ?
je suis web form.
-> au lieu d'utiliser un arraylist en destination, utiliser une table de hachage dont la clef est la propriété produit et la valeur l'item correspondant.
ton idée de la table est très bien c'est ce que j'avais fais avant de crée ma class et j'ai abandonner a cause du tri mais la comme est le trie est fait au préalable la table en destination de mon array (avec quelques colonne) me convient et la ça marcheras impeccable.
merci
ok merci pour les commentaires ;-)
je sais definir la mise en page de mon datagrid avec des BD mais la je ne
sais comment faire avec le arraylist
c'est la premiere ligne qui donne le nom des collones ???
Vous êtes en ASP.NET ou en Windows Forms ?
je suis web form.
-> au lieu d'utiliser un arraylist en destination, utiliser une table de
hachage dont la clef est la propriété produit et la valeur l'item
correspondant.
ton idée de la table est très bien c'est ce que j'avais fais avant de crée
ma class
et j'ai abandonner a cause du tri mais la comme est le trie est fait au
préalable la table en destination de mon array (avec quelques colonne) me
convient et la ça marcheras impeccable.
je sais definir la mise en page de mon datagrid avec des BD mais la je ne sais comment faire avec le arraylist c'est la premiere ligne qui donne le nom des collones ???
Vous êtes en ASP.NET ou en Windows Forms ?
je suis web form.
-> au lieu d'utiliser un arraylist en destination, utiliser une table de hachage dont la clef est la propriété produit et la valeur l'item correspondant.
ton idée de la table est très bien c'est ce que j'avais fais avant de crée ma class et j'ai abandonner a cause du tri mais la comme est le trie est fait au préalable la table en destination de mon array (avec quelques colonne) me convient et la ça marcheras impeccable.
merci
Zazar
> >> je sais definir la mise en page de mon datagrid avec des BD mais la je
ne
>> sais comment faire avec le arraylist >> c'est la premiere ligne qui donne le nom des collones ??? > Vous êtes en ASP.NET ou en Windows Forms ? je suis web form.
Alors il vous suffit de rajouter dans votre DataGrid des colonnes ayant pour titre le texte que vous voulez et comme DataField le nom d'une des propriétés de votre classe.
-- Zazar
> >> je sais definir la mise en page de mon datagrid avec des BD mais la je
ne
>> sais comment faire avec le arraylist
>> c'est la premiere ligne qui donne le nom des collones ???
> Vous êtes en ASP.NET ou en Windows Forms ?
je suis web form.
Alors il vous suffit de rajouter dans votre DataGrid des colonnes ayant pour
titre le texte que vous voulez et comme DataField le nom d'une des
propriétés de votre classe.
> >> je sais definir la mise en page de mon datagrid avec des BD mais la je
ne
>> sais comment faire avec le arraylist >> c'est la premiere ligne qui donne le nom des collones ??? > Vous êtes en ASP.NET ou en Windows Forms ? je suis web form.
Alors il vous suffit de rajouter dans votre DataGrid des colonnes ayant pour titre le texte que vous voulez et comme DataField le nom d'une des propriétés de votre classe.
-- Zazar
Pas de Spam
> Alors il vous suffit de rajouter dans votre DataGrid des colonnes ayant
pour
titre le texte que vous voulez et comme DataField le nom d'une des propriétés de votre classe.
et oui c'est presque comme ca que j'ai fait. et ca marche au poil ;-) super super
j'ai declare un datagridtabelstyle avec des gridcolunstyle.mapagename = nom des colonnes de ma table table.column="1er col" ......
> Alors il vous suffit de rajouter dans votre DataGrid des colonnes ayant
pour
titre le texte que vous voulez et comme DataField le nom d'une des
propriétés de votre classe.
et oui c'est presque comme ca que j'ai fait. et ca marche au poil ;-) super
super
j'ai declare un datagridtabelstyle avec des gridcolunstyle.mapagename = nom
des colonnes de ma table
table.column="1er col" ......