LINQ Extension Methods: Intersect

by wolfgang@gehirnwindung.de (Wolfgang) Mai 19, 2010 20:25

Mit der Intersect-Erweiterungsmethode vergleicht man zwei Sequenzen des gleichen Typs miteinander und erhält als Ergebnis eine neue Sequenz, in der die Elemente der ersten Sequenz vorhanden sind, die auch in der 2. Sequenz vorkommen (Gegenteilig zur Except-Erweiterungsmethode). Dabei wird jedes Element nur einmal aufgeführt. Verglichen wird - wenn man nichts anderes angibt - mit EqualityComparer<T>.Default.

Ohne Intersect Extension Method kann man das Verhalten in etwa so nachbilden

private List<T> Intersect<T>( List<T> list1, List<T> list2, EqualityComparer<T> comparer ) {
    var ret = new List<T>( );
    if( comparer == null ) comparer = EqualityComparer<T>.Default;

    for( int i = 0; i < list1.Count; i++ ) {
        if(
            !ret.Contains( list1[i], comparer ) &&
            list2.Contains( list1[i], comparer )
        ) {
            ret.Add( list1[i] );
        }
    }

    return ret;
}

Der Aufruf mit Erweiterungsmethode kann so erfolgen

list1.Intersect( list2 );
list1.Intersect( list2, EqualityComparer<T>.Default );

Kommentare

19.05.2010 21:34:58 #

trackback

LINQ Extension Methods: Intersect

Sie wurden gekickt (eine gute Sache) - Trackback von  dotnet-kicks.de

dotnet-kicks.de |

09.07.2010 06:40:29 #

tillias

Why using List<T> instead of IEnumerable<T>?
LINQ to Objects itself isn't bounded to IList<T> or any other implementation of collection. What to do if I'd like to use your methods for arrays?

I'd suggest slightly redesign those methods in more LINQ"ish" way and rely them on IEnumerable<T> only.

Thanks!

tillias Russische Föderation |

30.01.2012 21:46:07 #

pingback

Pingback from project-medlan.de

Vergleichen von zwei Listen in .NET «  Project Medlan

project-medlan.de |

20.12.2012 11:26:12 #

Saint Joseph Wein

Danke für diese Post. Ich habe das benutzt für ein meine Software

Saint Joseph Wein Deutschland |

Kommentare sind geschlossen

Powered by BlogEngine.NET 1.6.1.6
Theme by Mads Kristensen | Modified by Mooglegiant and me ;)