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;
}
}
Alte URL:
/snippet/linq-erweiterung-xor/3840