相关疑难解决方法(0)

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

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

.net c# string hash gethashcode

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

基于String生成唯一的哈希代码

我有以下两个字符串:

var string1 = "MHH2016-05-20MASTECH HOLDINGS, INC. Financialshttp://finance.yahoo.com/q/is?s=mhhEDGAR Online FinancialsHeadlines";

var string2 = "CVEO2016-06-22Civeo upgraded by Scotia Howard Weilhttp://finance.yahoo.com/q/ud?s=CVEOBriefing.comHeadlines";
Run Code Online (Sandbox Code Playgroud)

乍一看这两个字符串是不同的,但是它们的哈希码使用的是相同的GetHashCode method.

        var hash = 0;
        var total = 0;
        foreach (var x in string1) //string2
        {
            //hash = x * 7;
            hash = x.GetHashCode();
            Console.WriteLine("Char: " +  x + " hash: " + hash + " hashed: " + (int) x);
            total += hash;
        }
Run Code Online (Sandbox Code Playgroud)

两个字符串的总计最终为620438779.还有另一种方法会返回更独特的哈希码吗?我需要基于字符串中的字符使哈希码唯一.虽然两个字符串都不同并且代码正常工作,但这两个字符串恰好相同.如何改进此代码以使其更加独特?

c#

10
推荐指数
2
解决办法
4万
查看次数

在.NET中,可以存在Dictionary <string,TValue>的关键冲突

我刚刚了解到:

这让我想到,.NET中的字典(至少在使用字符串作为键时)容易受到键冲突的影响.

这种钥匙碰撞会发生什么?是否存在任何已知的唯一字符串值,实际发生碰撞?字典是否会在这些关键值上被打破?

另外:

  • 这取决于代码是在32位还是64位系统上运行?
  • 使用短字符串到特定长度是否安全?更安全吗?

注意:我不是指特定的.NET CLR,但如果重要,那么让我们来谈谈桌面的4.5.2 32位版本.


关于重复的说明:

.net c# dictionary key hash-collision

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

标签 统计

c# ×3

.net ×2

dictionary ×1

gethashcode ×1

hash ×1

hash-collision ×1

key ×1

string ×1