我有一个数据结构,由两个值组成,第一个是整数,第二个是由数字开头的字母数字混合字符串:
+--------+-----------------+
| Number | Name |
+--------+-----------------+
| 15 | APPLES |
| 16 | APPLE COMPUTER |
| 17 | ORANGE |
| 21 | TWENTY-1 |
| 291 | 156TH ELEMENT |
+--------+-----------------+
一张表格可能包含多达100,000行。
我想提供一个查找函数,用户可以查找数字(就像字符串一样)或字符串的一部分。理想情况下,当用户输入时,查找将是“实时”的; 每次按键后(或者在短暂的延迟 ~250-500毫秒后),将进行新的搜索以找到最有可能的候选项。因此,例如在以下搜索:
1将返回15 APPLE,16 APPLE COMPUTER,17 ORANGE和291 156TH ELEMENT
15将缩小搜索范围为15 APPLES和291 156TH ELEMENT
AP将返回15 APPLES和16 APPLE COMPUTER
(理想情况下,但不是必需的)ELEM将返回291 156TH ELEMENT。
我考虑使用两个Dictionary,因为最终int作为字符串进行比较——一个将以整数部分为索引,另一个将以字符串部分为索引。
但是,用子串搜索真的不应该使用哈希函数,而且使用我认为应该需要的两倍内存似乎很浪费。
最终的问题是,在同时搜索两个大列表中是否有任何性能良好的文本搜索方式的子字符串?
如果失败,那么
SortedDictionary
呢?可能会提高性能,但仍无法解决哈希问题。想过即时创建正则表达式,但我认为性能会很差。
我是C#的新手(来自Java世界),所以还没有研究LINQ; 那是答案吗?
编辑18:21 EST:如果字符串中的“名称”字段不会超过12-15个字符,则影响您的潜在解决方案。