110,538
社区成员
发帖
与我相关
我的任务
分享
public override unsafe int GetHashCode()
{
fixed (char* str = ((char*) this))
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*) chPtr;
for (int i = this.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}
public static unsafe int GetHashCode(string strsrc)
{
fixed (char* str = strsrc)
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*)chPtr;
for (int i = strsrc.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}
Dictionary<uint, string> src = new Dictionary<uint, string>();
List<uint> other = new List<uint>(2000000);
int result = 0;
timer.Reset();
timer.Start();
for (int i = 0; i < 2000000; i++)
{
uint ii = (uint)myHash.GetHashCode(i.ToString());
if (!src.ContainsKey(ii))
{
src.Add(ii, i.ToString());
}
else
{
textBox1.AppendText(ii.ToString() + "—");
}
}
//result = myHash.GetHash(textBox1.Text);
timer.Stop();
MessageBox.Show(result + "Time:" + timer.ElapsedTicks + "\r\n List<int> num is:" + other.Count.ToString());
public static List<string> P(string s)
{
if (s.Length==1)
{
List<string> r = new List<string>();
r.Add("");
r.Add("a");
return r;
}
else
{
List<string> tmp = P(s.Substring(0, s.Length - 1));
List<string> ret=new List<string>();
foreach (string t in tmp)
{
ret.Add(t);
}
foreach (string t in tmp)
{
for (int len = t.Length; len >=0; len--)
{
string insert = t;
insert=insert.Insert(len, s[s.Length - 1].ToString());
ret.Add(insert);
}
}
return ret;
}
}
List<string> ret = P("abcdefghij");
Dictionary<int, string> dic = new Dictionary<int, string>();
foreach (string s in ret)
{
try
{
dic.Add(s.GetHashCode(), s);
}
catch
{
MessageBox.Show(s + "_" + dic[s.GetHashCode()]);
}
}