Chapeau bas monsieur, Cela fonctionne nikel !
J'abuse mais à titre d'information, je me demandais pourquoi tu faisais une comparaison entre 2 string en utilisant == plutot que .Equals ?
Merci beaucoup mehdi_tn !
Version imprimable
Chapeau bas monsieur, Cela fonctionne nikel !
J'abuse mais à titre d'information, je me demandais pourquoi tu faisais une comparaison entre 2 string en utilisant == plutot que .Equals ?
Merci beaucoup mehdi_tn !
Medhi, pour tout te dire, ma liste contient environ 115 000 objets.
J'ai commencé par faire un tri au préalable mais je commence à me demander si cela est nécessaire pour lancer ma comparaison d'objet.
Le traitement est vraiment très long ...
Encore une question, je sais je commence à être pénible ;)Citation:
Envoyé par mehdi_tn
La comparaison se fait sur les références ? cela veut dire quoi exactement ?
ça signifie qu'il regarde l'adresse ou est stockée la valeur et non la valeur elle même si je ne me trompe pas.
Je te fais une analogie facile a capter :
Jean dupont et jean dupont sont deux jumeaux ils ont la même adress ele même age, les même parent etc... ils sont identique et pourtant ce sont 2 individu different donc
Pour que tes deux individu jean dupont soit considéré comme identique tu doit créer une "règle" qui dit par exemple :Code:Jean dupont <> Jean dupont
Voilà :)Citation:
Si l'individu A a le même age et la même adresse que l'individu B alors il sont considéré comme étant identique
Merci ekinox17.
pourrais tu aussi me répondre aussi simplement pour mes autres questions ? :oops:
c'est pareil juste une question de synataxe, le double egal est peut etre même plus rapide a executé enfin je ne sais pas je n'ai pas tester, mais a l'origine le double egal est un signe comparatif du langage C tantdis que la fonction equal est une fonction implementé par la framework.Citation:
je me demandais pourquoi tu faisais une comparaison entre 2 string en utilisant == plutot que .Equals ?
Aïe :cry: ça fait beaucoup, tu te demande si cela est necessaire de trier pour les comparé ? et bien non tu devrais relire les très bon conseils de mehdi_tn qui a dit qu'il était parti sur une mauvaise voie.Citation:
Medhi, pour tout te dire, ma liste contient environ 115 000 objets.
J'ai commencé par faire un tri au préalable mais je commence à me demander si cela est nécessaire pour lancer ma comparaison d'objet.
Le traitement est vraiment très long ...
Il t'as réorienté en te disant que cela n'etais pas nécessaire mais que tu devais plutot implementer IEquatable et non pas IComparable.
Merci ekinox17 pour l'aide :). Je vais essayer d'expliquer pareil.Citation:
Envoyé par ekinox17
supposons que tu as deux string jumeaux Jean Batiste et Jean dupont. Leur pere qui est le framework dot net est aveugle, il doit utiliser la méthode equals qui va comparer l'age l'adresse et tout le reste pour reconnaitre ses jumeaux. La mere du framework est aveugle aussi comme par hasard, mais elle n'aime pas utiliser la fonction equals pour une raison que je ne connais pas. Mais elle connais un opérateur == qui pourrait faire l'affaire. Alors elle demande à son mari Mr framework dot net de surcharger cet opérateur pour qu'il soit utilisé comme le equal. Voila maintenant tu peux comparer les string soit avec equals ou ==. Mais à la base == est utiliser pour comparer les references comme ekinox17 te la bien expliqué. Voir Override operator equals on overloading add and subtract , pour plus d'explication.Citation:
Envoyé par dacamp
Maintenant pour l'histoire du tri. Si tu veux que ta liste soit tout le temps triée dans ce cas utilise plutôt la collection SortedList ou SortedDictionary en ignorant les valeurs (c'est des structures Clé/Valeur). Tu trouveras dans ces liens la difference entre ces deux Collections. A priori c'est la SortedDictionary qu'il te faut.
L'autre moyen c'est d'utiliser la fonction Sort de ta list, là c'est normal que le traitement soit long.
Dans tous les cas il faut implémenter IComaparable dans ta classe ou passer un objet Icomparer, au moins notre discussion aura servi ;)
Encore merci Mehdi.
Pour continuer sur ma lancée et comme tu connais le sujet, j'ai une autre question. Comme je commence à mieux comprendre les interfaces, je me lance dans un dev qu'auparavant j'aurais contourné ...
Je désire utiliser un foreach afin de parcourir chaque élément de mon objet distri. (mes attributs sont tous des strings)
Donc je fais :
Malheureusement cela ne fonctionne pas et pour cause il n'existe pas de méthode GetEnumerator dans ma classe Distri.Code:
1
2
3
4 foreach (String v_element in distri) { }
tu vois, je progresse 8-)
Par contre,ensuite je sechè :oops:
Tu peux m'expliquer car comme ma classe herite deja de :
Comment je peux faire ?Code:
1
2class Distri : IEquatable<Distri>
Je crois qu'il faut implémenter IEnumerable
Bon j'ai la réponse à ma dernière question même si je ne sais pas si cela est la meilleure méthode.
Dans ma classe Distri j'ajoute la méthode GetEnumerator comme suit :
ensuite je peux utiliser le foreach sur mon objet v_distri :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public IEnumerator<string> GetEnumerator() { string[] v_listElements = new string[23]; v_listElements[0] = m_codeOPE; v_listElements[1] = m_numOPE; v_listElements[2] = m_statutOP; foreach (string v_element in v_listElements) { yield return v_element; } }
Maintenant je repete que cela n'est peut etre pas la bonne méthode mais elle fonctionne. Je suis à l'écoute de toute suggestion sur le sujet. 8OCode:
1
2
3
4
5 foreach (string v_element in v_distri) { (...) }
Just ajouter que c'est mieux d'utiliser StringCollection (C# 2.0)
Eviter :
Mieux:Code:List<string> lst = new List<string>();
:)Code:StringCollection lst = new StringCollection();
ok merci pour cette précision.
j'ai une question pratique ... je ne trouve plus le tag résolu, normal ?
tout a fait normal, vu que tu n'es pas l'auteur du premier post ;)
LOL ... pas con en effet :)
A partir du .NET 3.5, on peut faire plus simple pour savoir si la liste a des doublons :
Code:
1
2
3
4
5 if (maList.Count == maList.Distinct().Count()) { // Pas de doublon } else { // Ya des ou un doublon }
Code:L.RemoveAll(Function(s As String) L.FindAll(Function(ss As String) ss = s).Count > 1)