Sto*_*ver 1 c# hash dictionary
因此,我需要在C#中创建一个结构,该结构将充当(很大)字典的键,如下所示:
private readonly IDictionary<KeyStruct, string> m_Invitations;
Run Code Online (Sandbox Code Playgroud)
问题是,我真的需要一个结构用作键,因为只能通过两个单独的数据项来标识条目,其中一个可以是空(不仅是空!)字符串。
我需要在该结构上实现什么?您将如何创建哈希?哈希冲突(偶尔发生)会严重影响性能还是可以忽略不计?
我问,因为这是“内循环”代码。
如果您有共享工具,则可以使用Alt-Ins-> Equality成员生成这些方法。
这是您为KeyStruct生成的代码:
public struct KeyStruct : IEquatable<KeyStruct>
{
public string Value1 { get; private set; }
public long Value2 { get; private set; }
public KeyStruct(string value1, long value2)
: this()
{
Value1 = value1;
Value2 = value2;
}
public bool Equals(KeyStruct other)
{
return Equals(other.Value1, Value1) && other.Value2 == Value2;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (obj.GetType() != typeof (KeyStruct)) return false;
return Equals((KeyStruct) obj);
}
public override int GetHashCode()
{
unchecked
{
return ((Value1 != null ? Value1.GetHashCode() : 0)*397) ^ Value2.GetHashCode();
}
}
public static bool operator ==(KeyStruct left, KeyStruct right)
{
return left.Equals(right);
}
public static bool operator !=(KeyStruct left, KeyStruct right)
{
return !left.Equals(right);
}
}
Run Code Online (Sandbox Code Playgroud)