我需要实现一个有效的o(1)搜索算法。如果我使用HashSet,并且会尝试通过User.FirstName进行搜索,例如它是否正确?如果没有,请给我一个建议,我怎么才能实现这个搜索?查找速度通用
查找速度通用
回答
您需要使用Dictionary<TKey,TValue>
,其中TKey
构建在搜索类型上。但是,如果您使用的内容类似FirstName
作为搜索词,您可能会使用同一个键具有多个值,这会导致问题。
可能更好的选择是使用ToLookup为您生成ILookup
。例如:
IEnumerable<Person> people = GetPeople();
var nameLookup = people.ToLookup(p => p.FirstName);
你可以再做:
var peopleNamedFred = nameLookup["Fred"];
foreach(var fred in peopleNamedFred)
Console.WriteLine("{0} {1}, fred.FirstName, fred.LastName);
LookUp是不可变的。这对一些用途很好,但是对其他用户不可用。 – CodesInChaos
@CodeInChaos:True - 如果数据更改,则必须重新生成ILookup。话虽如此,如果需要,你可以使用'字典
创建的System.Collections.ObjectModel.KeyedCollection
的实现。
根据MSDN reference它“提供了O(1)索引检索和接近O(1)的密钥检索”。但是,它仍然具有Dictionary' and
HashTable`具有重复键不被允许的限制。如果您需要重复的键值,或者您需要能够在不同的时间使用不同的项目作为键,那么Reed Copsey提供了一个非常好的解决方案。
- 1. 查找:DisplayTemplates速度
- 2. Excel查找平均速度
- 3. 查找3D速度矢量
- 4. TLS可变查找速度
- 5. 如何仅使用加速度计查找速度?
- 6. 查找通过迅速
- 7. 根据角度和速度查找速度矢量
- 8. 通过书签查找优化SQL查询速度减慢
- 9. mysql - MyISAM或InnoDB - 加入速度与查找速度
- 10. 在iOS中查找速度和加速度
- 11. 通过密钥查找.NET字典值的速度?
- 12. 使用GPS寻找速度
- 13. 以速度查找模板文件
- 14. 查找速度快于std :: set
- 15. DataSet行/列查找的速度?
- 16. 在Android中查找速度和带宽
- 17. 如何查找硬盘速度
- 18. 查找当前的加速度计值
- 19. 找到SUM时查询执行速度
- 20. libGDX:游戏通用速度
- 21. 查询速度
- 22. python:快速词典查找通配符*
- 23. 通过ID快速查找索引
- 24. 通过csv快速查找字符串
- 25. 快速查找
- 26. 快速查找
- 27. cart.php查询速度慢,速度波动
- 28. 使用Apache速度查看
- 29. $ null检查速度
- 30. SQL查询速度
您可能需要'Dictionary'来代替。 –
@Ben:不,如果你使用FirstName,你会得到重复的键... –
@Reed:真的,你想要的东西沿'unordered_multimap'的行...我不认为任何提供。净。 –