Feedback

LINQ Erweiterung: Xor

Sprache: C#

In LINQ gibt es zwar eine Sum-Methode, aber keine für Xor. Dieses Snippet füllt die Lücke. [b]Anwendungsmöglichkeiten[/b] Eine Mögliche Anwendung ist die Ermittlung des Hashcodes eines Arrays: [code]array.Select(x=>x.GetHashCode()).Xor()[/code] Dieser unterscheidet sich nicht, wenn die Elemente nicht unterschiedlich sind. Siehe auch: Testanwendung [b]Benötigte Namespaces[/b] System System.Collections.Generic System.Linq (für weitere LINQ-Methoden) [b]Testanwendung[/b] [code]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();[/code]
/// <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;
    }
}
/// <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;
    }
}