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 !
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énibleEnvoyé 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 : Sélectionner tout - Visualiser dans une fenêtre à part Jean dupont <> Jean dupont
Voilà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
1 || 1 = 1
1 && 1 = 1
1 * 1 = 1
Bon après tout, peut-être que Van Damme avait raison :
1 + 1 = 1 // harmonie parfaite
Merci ekinox17.
pourrais tu aussi me répondre aussi simplement pour mes autres questions ?
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.je me demandais pourquoi tu faisais une comparaison entre 2 string en utilisant == plutot que .Equals ?
Aïe ç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.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.
1 || 1 = 1
1 && 1 = 1
1 * 1 = 1
Bon après tout, peut-être que Van Damme avait raison :
1 + 1 = 1 // harmonie parfaite
Merci ekinox17 pour l'aide . Je vais essayer d'expliquer pareil.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.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
Mehdi Feki : Modérateur .Net
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreach (String v_element in distri) { }
tu vois, je progresse
Par contre,ensuite je sechè
Tu peux m'expliquer car comme ma classe herite deja de :
Comment je peux faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2class Distri : IEquatable<Distri>
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part List<string> lst = new List<string>();
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringCollection lst = new StringCollection();
Even the biggest journey, starts with a single step.
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
1 || 1 = 1
1 && 1 = 1
1 * 1 = 1
Bon après tout, peut-être que Van Damme avait raison :
1 + 1 = 1 // harmonie parfaite
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (maList.Count == maList.Distinct().Count()) { // Pas de doublon } else { // Ya des ou un doublon }
Code : Sélectionner tout - Visualiser dans une fenêtre à part L.RemoveAll(Function(s As String) L.FindAll(Function(ss As String) ss = s).Count > 1)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager