У меня есть структура данных, которая состоит из пар значений, первое из которых является целым числом, а второе - буквенно-цифровой строкой (которая может начинаться с цифр):
+--------+-----------------+
| Number | Name |
+--------+-----------------+
| 15 | APPLES |
| 16 | APPLE COMPUTER |
| 17 | ORANGE |
| 21 | TWENTY-1 |
| 291 | 156TH ELEMENT |
+--------+-----------------+
Таблицаиз них будет составлять до 100 000 строк.
Я хотел бы предоставить функцию поиска, в которой пользователь может искать либо число (как если бы это была строка), либо фрагменты строки.В идеале поиск будет "живым", когда пользователь вводит текст;после каждого нажатия клавиши (или, возможно, после небольшой задержки ~ 250-500 мс) будет выполняться новый поиск, чтобы найти наиболее вероятных кандидатов.Так, например, поиск по
1
вернет 15 APPLES
, 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<string, string>
с, поскольку в конечном итоге int
сравниваются как string
с - один будет индексироваться целой частью, а другой - строкой.
Но на самом деле поиск по подстроке не должен использовать хеш-функцию, и, кажется, расточительно использовать вдвое больше памяти, чем мне нужно.
В конечном счете, вопрос в том, есть лиэффективный способ текстового поиска в двух больших списках одновременно для подстрок?
В противном случае, как насчет SortedDictionary
?Может повысить производительность, но все равно не решит проблему с хешем.
Мысль о создании регулярного выражения на лету, но я думаю, что это будет работать ужасно.
Я новичок в C # (пришедший из мира Java), поэтому я еще не изучал LINQ;это ответ?
РЕДАКТИРОВАТЬ 18:21 EST : ни одна из строк в поле «Имя» не будет длиннее 12-15 символов, если это влияет на ваше потенциальное решение.