.NET équivalent à la fonction java.util.Arrays.hashCode () pour les tableaux de types intrinsèques?
-
19-09-2019 - |
Question
Y at-il a.NET classe utilitaire équivalent à java.util.Arrays.hashCode () pour les tableaux de types intrinsèques tels que int [], short [], float [], etc.?
Il est évident que je pourrais écrire ma propre classe utilitaire, mais a été en essayant de trouver un déjà disponible dans le framework .NET.
La solution
Dans les tableaux .NET 4.0 soutiendront ce via le l'interface de IStructuralEquatable, mais jusqu'à ce moment-là, vous aurez à faire vous-même, j'ai peur.
Autres conseils
Je suis assez sûr qu'il n'y a rien dans le cadre lui-même qui le fait. Il peut y avoir quelques implémentations tierces, mais il n'y a rien intégré (et public).
Je ne suis pas au courant d'une telle chose étant intégrée dans .Net jusqu'à la version 3.5, bien que .Net 4 est très susceptible de supporter nativement via l'interface de IStructuralEquatable qui Array
mettra en œuvre (grâce à Greg Beech pour le souligner).
Voici une implémentation simple en utilisant une méthode d'extension sur IEnumerable.
int HashContents<T>(this IEnumerable<T> enumerable)
{
int hash = 0x218A9B2C;
foreach (var item in enumerable)
{
int thisHash = item.GetHashCode();
//mix up the bits.
hash = thisHash ^ ((hash << 5) + hash);
}
return hash;
}
Cela donnera différentes hashcodes pour {0,0}
et {0,0,0}
.