[英]How can I check for an item in a DataGridViewComboBoxColumn without using an object?
[英]How can I check if a HashSet contains an item using the hash of the item?
我想检查HashSet是否包含特定元素。 我已经有了元素的int
哈希码,但没有对元素本身的引用。
是否可以在不迭代整个集合的情况下执行此操作?
没有为什么
HashSet
/ Dictionary
不公开此实现细节 如果你真的需要通过哈希码找到对象,你可以
特殊比较器的近似代码
class ObjectsToStore
{
....
public int? HashCodeOverwrite;
}
class ComparerByHashCode : IEqualityComparer<ObjectsToStore>
{
public bool Equals(ObjectsToStore b1, ObjectsToStore b2)
{
if (b1.HashCodeOverwrite.HasValue || b2.HashCodeOverwrite.HasValue)
{
return b1.GetHashCode() == b2.GetHashCode());
}
// add all null checks here too.
return b1.Equals(b2);
}
public int GetHashCode(ObjectsToStore b)
{
return b.HashCodeOverwrite.HasValue? b.HashCodeOverwrite.Value:b.GetHashCode();
}
}
近似用法:
var myHashSet = new HashSet<ObjectsToStore>(new ComparerByHashCode());
var itemByHashCode = myHashSet[new ObjectsToStore{HasCodeOverwrite= 1234}];
编号哈希函数是单向函数。 它将实例从(可能无限大的)空间映射到有限的大空间。 它加快了过程,但不保证唯一性。
日常生活中非常简单的哈希函数可以是:存储员工记录,秘书使用26个文件夹,名为“A”到“Z”。 朱丽叶的唱片存放在'J'文件夹中,迈克在'M'中的记录,查理在'C'中的记录。 现在我给你这26个文件夹,你想知道公司里是否有人叫奥斯卡。 除非“O”文件夹为空,否则您必须检查该文件夹中的每条记录以告知答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.