【问题标题】:Which data structure to use for fast search? (C#)使用哪种数据结构进行快速搜索? (C#)
【发布时间】:2015-10-24 05:32:10
【问题描述】:

我需要一个高效的数据结构来进行搜索。目前我正在使用 System.Collections.Generic 中的一个简单列表,直到找到一个好的解决方案。

用户可以在运行时通过单击列表中的字符串来添加/删除字符串。但主要操作是搜索,因为每次用户想要查看列表时,如果用户之前已经点击过它,我需要检查每个条目。该列表可能包含大约 100-1000 个条目,用户可以从中选择大约 100 个。带有所选字符串的列表也将作为字符串数组保存到磁盘并需要再次加载。因此,如果数组以正确的顺序保存,数据结构应该可以快速从字符串数组重建。

我考虑过使用 AVL 树。这是一个很好的解决方案吗?还是可以进行散列(我不知道可以在编译时选择的字符串)?

【问题讨论】:

  • 我认为如果您的主要关注点是搜索,那么哈希映射/表会更有益。特别是如果您要存储字符串并且只需要说 100 个左右的条目。

标签: data-structures hash tree avl-tree


【解决方案1】:

由于您使用的是 C#,我建议您使用:Dictionary。它将允许您将字符串存储在哈希映射中(与 Java 的Map 相关)。在Dictionary 中存储字符串的好处类似于哈希表,它允许搜索、插入和删除的时间恒定。如果您想检查是否有重复值,您可以在此处查看更多信息:Finding duplicate values in dictionary and print Key of the duplicate element

【讨论】:

  • 字典看起来不错,但我要存储什么?我只有字符串,所以我是否将它们保存为键并设置一个默认值,如 0?
  • @Superwayne - 您可以通过多种方式创建Dictionary。您希望每个字符串都有自己的键,这样当您想查看该字符串是否在您的字典中时,您只需检查 Dictionary 的某个值。在默认零处列出所有字符串不是一个好主意,因为所有字符串都与值 0 相关联。您可以将它们存储为 IDictionary<string, string> dict = new Dictionary<string, string>();。这样,您的密钥就是您要查找的字符串,并且您可以存储该字符串以备日后使用。
  • @Superwayne - 然后您可以查看您的字典是否已经包含用户使用 C# 中的 ContainsKey() 方法输入的字符串。我希望这会有所帮助,如果您需要更多信息,可以在这里查看:tutorialsteacher.com/csharp/csharp-dictionary
猜你喜欢
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
相关资源
最近更新 更多