![](/img/trans.png)
[英]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.