Bonjour,

Voilà, j'ai une collection de ma classe Segment que voici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
public class Segment:IEquatable<Segment>
    {
        public readonly GPoint a, b;
 
        public Segment(GPoint a,GPoint b)
        {
            this.a = a;
            this.b = b;
        }
 
        public bool Equals(Segment other)
        {
            if(other == null) return false;
 
            if(other.a.Equals(a) && other.b.Equals(b) || other.a.Equals(b) && other.b.Equals(a)) return true;
 
            return false;
        }
 
        public override int GetHashCode()
        {
            return a.GetHashCode()+b.GetHashCode();
        }
 
        public override bool Equals(object obj)
        {
            return Equals(obj as Segment);
        }
    }
J'aimerais pouvoir récupérer dans ma collection tous les segments n'apparaissant qu'une seule et unique fois, pour cela, actuellement, j'utilise la requête suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
var useSegments = (from t1 in allSegments
                               where (from t2 in allSegments where t2.Equals(t1) select t2).Count() == 1
                               select t1).ToList();
le souci est que ma collection peut contenir plusieurs millions de segments, et cette requête devient de suite très longue à s'exécuter.

Y aurait-il une meilleure méthode pour récupérer mes segments?