gpt4 book ai didi

c# - 我应该使用什么类型的集合?

转载 作者:数据小太阳 更新时间:2023-10-29 01:46:18 27 4
gpt4 key购买 nike

我有大约 10,000 条记录。每条记录有 2 个字段:一个字段是长度最多为 300 个字符的字符串,另一个字段是一个十进制值。这就像一个产品目录,其中包含产品名称和每个产品的价格。

我需要做的是允许用户键入任何词并在列表框中显示包含该词的所有产品及其价格。就这样。

  1. 什么类型的集合最适合这种情况?
  2. 如果我需要根据产品名称或价格进行排序,选择是否仍然相同?

现在我正在使用一个 XML 文件,但我认为使用一个集合以便我可以将所有值嵌入到代码中更简单。感谢您的建议。

最佳答案

字典可以完成这项工作。但是,如果您正在进行快速部分匹配(例如,在用户输入时搜索),您可以通过创建多个指向同一项目的键来获得更好的性能。例如,单词“Apple”可以与“Ap”、“App”、“Appl”和“Apple”一起定位。

我已经在类似数量的记录上使用了这种方法,并取得了很好的效果。我已经将我的 10K 源项目变成了大约 50K 唯一 key 。这些词典条目中的每一个都指向一个列表,其中包含对该术语的所有匹配项的引用。然后您可以更有效地搜索这个小得多的列表。尽管这会创建大量列表,但内存占用是相当合理的。

如果需要重定向常见的拼写错误或指向相关项目,您也可以创建自己的键。这也消除了唯一键的大部分问题,因为每个键都指向一个列表。单个项目可以按其名称中的每个词进行分类;如果您的产品名称很长且包含多个单词,这将非常有用。对项目进行分类时,名称中的每个词都可以映射到一个或多个键。

我还应该指出,如果正确完成,构建和分类 10K 个项目应该不会花费很长时间(几百毫秒是合理的)。使用 Application 可以根据需要缓存结果。 , Cache , 或静态成员。

总而言之,生成的结构是一个 Dictionary<string, List<T>>其中字符串是一个短的(2-6 个字符很好)但唯一的键。每个键都指向一个 List<T> (或其他集合,如果您愿意的话)与该键匹配的项目。执行搜索时,您会找到与用户提供的术语相匹配的键。根据 key 的长度,您可以将用户的搜索截断到最大 key 长度。找到正确的子集合后,您可以使用您希望的任何方法在该集合中搜索完全或部分匹配项。

最后,您可能希望为列表中的每个项目创建一个轻量级结构,以便您可以存储有关该项目的附加信息。例如,您可以创建一个小的 Product 类来存储产品的名称、价格、部门和受欢迎程度。这可以帮助您优化向用户显示的结果。

总而言之,您可以实时执行智能、详细、模糊的搜索。

上述结构应提供大致相当于 trie 的功能.

关于c# - 我应该使用什么类型的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8623477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com