通过hashcode获取对象

本文关键字:取对象 获取 hashcode 通过 | 更新日期: 2023-09-27 17:58:24

我不明白为什么没有本机函数来做这件事。假设我创建以下类:

public class Student {
     public string Name {get; set;}
     public override int GetHashCode() {
         return(Name.GetHashCode());
     }
}

然后,我创建了一个包含许多学生的HashSet。现在我想从HashSet获得一个使用他的名字的学生,这也是所使用的哈希代码,没有枚举。这可能吗?如果是,我将如何实现这一点?由于学生的名字被用作哈希码,这应该可以通过O(1)操作实现,对吧?

通过hashcode获取对象

哈希码是而不是唯一标识符。不同的对象可能具有相同的哈希代码。对散列码的唯一要求是被认为相等的对象具有相同的散列码。

如果需要基于关键字检索项目的O(1),请使用Dictionary<TKey, TValue>,而不是HashSet<T>

不要使用HashSet(或字典)来存储学生,而是使用KeyedCollection。

public class StudentCollection : KeyedCollection<string, Student>
{
    protected override string GetKeyForItem(Student item)
    {
        return student.Name;
    }
}

这将使您能够像Dictionary一样快速地按名称进行查找,但在插入时不需要手动将名称与关键字配对。但请注意,没有两个学生可以有相同的名字,否则你会出错(就像你有一本字典,使用了两个同名的学生一样)。