相关疑难解决方法(0)

重写System.Object.GetHashCode的最佳算法是什么?

在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?

.net algorithm hashcode gethashcode

1389
推荐指数
14
解决办法
19万
查看次数

如何实现C#字符串的GetHashCode()?

我只是很好奇,因为我猜它会影响性能.它是否考虑完整的字符串?如果是,长字符串会很慢.如果它只考虑字符串的一部分,它将具有不良的性能(例如,如果它只考虑字符串的开头,如果HashSet主要包含具有相同的字符串,则它将具有不良性能.

.net c# string hash gethashcode

58
推荐指数
2
解决办法
3万
查看次数

读取String作为int指针

好吧,所以这一切都始于我对哈希码的兴趣.在Jon Skeet的一篇文章中做了一些阅读后,我问了这个问题.这让我对指针算法非常感兴趣,这是我几乎没有经验的.所以,在阅读完这个页面后,我开始尝试,因为我从那里得到了一个基本的理解,我的其他很棒的同行在这里!

现在我正在做更多的实验,我相信我已经准确地复制了string下面实现中的哈希码循环(我保留了错误的权利):

Console.WriteLine("Iterating STRING (2) as INT ({0})", sizeof(int));
Console.WriteLine();

var val = "Hello World!";
unsafe
{
    fixed (char* src = val)
    {
        var ptr = (int*)src;
        var len = val.Length;
        while (len > 2)
        {
            Console.WriteLine((char)*ptr);
            Console.WriteLine((char)ptr[1]);

            ptr += 2;
            len -= sizeof(int);
        }

        if (len > 0)
        {
            Console.WriteLine((char)*ptr);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,结果对我来说有点困惑; 的种类.结果如下:

Iterating STRING (2) as INT (4)

H
l
o
W
r
d
Run Code Online (Sandbox Code Playgroud)

我原来认为,值ptr[1]是第二个与第一个字母一起读取(或挤压在一起)的字母.但是,显然不是这样.那是因为 …

c#

4
推荐指数
1
解决办法
221
查看次数

标签 统计

.net ×2

c# ×2

gethashcode ×2

algorithm ×1

hash ×1

hashcode ×1

string ×1