From 1341faa87080838eaa1c944b6e8b2cdaabf74368 Mon Sep 17 00:00:00 2001 From: pepelev Date: Wed, 1 Oct 2025 18:19:03 +0500 Subject: [PATCH] Reduce linq and use HashCode type --- src/Comparation/CollectionEquality.cs | 29 +++------------------------ src/Comparation/SequenceEquality.cs | 15 ++++++++------ 2 files changed, 12 insertions(+), 32 deletions(-) diff --git a/src/Comparation/CollectionEquality.cs b/src/Comparation/CollectionEquality.cs index 63a92a8..b694cef 100644 --- a/src/Comparation/CollectionEquality.cs +++ b/src/Comparation/CollectionEquality.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; #if NET6_0_OR_GREATER using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -44,32 +43,10 @@ public bool Equals(IReadOnlyCollection? x, IReadOnlyCollection? y) public int GetHashCode(IReadOnlyCollection collection) { - var count = collection.Count; -#if NETCOREAPP2_1_OR_GREATER - var hashCodes = count <= 1024 / sizeof(int) - ? stackalloc int[count] - : new int[count]; -#else - var hashCodes = new int[count]; -#endif - var i = 0; - foreach (var item in collection) - { - hashCodes[i++] = itemEquality.GetHashCode(new Box(item)); - } - -#if NETCOREAPP2_1_OR_GREATER - hashCodes.Sort(); -#else - Array.Sort(hashCodes); -#endif - var resultHashCode = 0; - foreach (var hashCode in hashCodes) + foreach (var item in collection) { - resultHashCode = unchecked( - (resultHashCode * 397) ^ hashCode - ); + resultHashCode ^= itemEquality.GetHashCode(new Box(item)); } return resultHashCode; diff --git a/src/Comparation/SequenceEquality.cs b/src/Comparation/SequenceEquality.cs index 8b35be0..b2d12cb 100644 --- a/src/Comparation/SequenceEquality.cs +++ b/src/Comparation/SequenceEquality.cs @@ -1,4 +1,7 @@ -using System.Collections.Generic; +#if !NETSTANDARD2_0 +using System; +#endif +using System.Collections.Generic; using System.Linq; namespace Comparation @@ -29,22 +32,22 @@ public bool Equals(IEnumerable? x, IEnumerable? y) return false; } - return x!.SequenceEqual(y!, itemEquality!); + return x!.SequenceEqual(y!, itemEquality); } public int GetHashCode(IEnumerable obj) { - var hashCode = 0; + var hash = new HashCode(); foreach (var item in obj) { - var itemHashCode = item is { } value + var itemHash = item is { } value ? itemEquality.GetHashCode(value) : 0; - hashCode = unchecked((hashCode * 397) ^ itemHashCode); + hash.Add(itemHash); } - return hashCode; + return hash.ToHashCode(); } } } \ No newline at end of file