Feedback

C# - LINQ Erweiterung: Xor

Veröffentlicht von am 2/20/2014
(0 Bewertungen)
In LINQ gibt es zwar eine Sum-Methode, aber keine für Xor. Dieses Snippet füllt die Lücke.

Anwendungsmöglichkeiten
Eine Mögliche Anwendung ist die Ermittlung des Hashcodes eines Arrays:
array.Select(x=>x.GetHashCode()).Xor()

Dieser unterscheidet sich nicht, wenn die Elemente nicht unterschiedlich sind. Siehe auch: Testanwendung

Benötigte Namespaces
System
System.Collections.Generic
System.Linq (für weitere LINQ-Methoden)

Testanwendung
int[] a1 = { 1, 2, 3, 4 };
int[] a2 = { 1, 2, 3, 4 };
Console.WriteLine("HashCodes:");
Console.WriteLine(a1.GetHashCode());
Console.WriteLine(a2.GetHashCode());
Console.WriteLine("Xor:");
Console.WriteLine(a1.Xor());
Console.WriteLine(a2.Xor());
Console.ReadKey();
/// <summary>
/// Berechnet das bitweise XOR der Werte in der Liste.
/// </summary>
/// <param name="source">Die Liste von Ganzzahligen Werten.</param>
/// <returns>Die bitweise XOR verknüpfung aller Werte./returns>
public static int Xor(this IEnumerable<int> source)
{
    if (source == null)
        throw new ArgumentNullException("source");
    using (var enu = source.GetEnumerator())
    {
        enu.MoveNext();
        int result = enu.Current;//? first element

        while (enu.MoveNext())
            result ^= enu.Current;//? other elements

        return result;
    }
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!