Я программирую программу для поиска по имени из списка, и мне нужно найти их, даже если ключевое слово находится не перед именами (это то, что я имею в виду без префикса)
например, , если в моем списке есть музыкальные инструменты, и я набираю "гитара" в поле поиска.
Следует найти названия "Гитара, Гитараон, Акустическая гитара, Бас-гитара, ..."
или что-то в этом роде * * * * * * Поисковый запрос Longdo Dictionary.
вот мой простой и глупый алгоритм (это все, что я могу сделать)
const int SEARCHROWLIMIT = 30;
private string[] DoSearch(string Input, string[] ListToSearch)
{
List<string> FoundNames = new List<string>();
int max = 0;
bool over = false;
for (int k = 0; !over; k++)
{
foreach (string item in ListToSearch)
{
max = (max > item.Length) ? max : item.Length;
if (k > item.Length) continue;
if (k >= max) { over = true; break; }
if (!Input.Equals("Search")
&& item.Substring(k, item.Length - k).StartsWith(Input, StringComparison.OrdinalIgnoreCase))
{
bool exist = false;
int i = 0;
while (!exist && i < FoundNames.Count)
{
if (item.Equals(FoundNames[i]))
{
exist = true;
break;
}
i++;
}
if (!exist && FoundNames.Count < SEARCHROWLIMIT)
FoundNames.Add(item);
else if (FoundNames.Count >= SEARCHROWLIMIT) over = true;
}
}
}
return FoundNames.ToArray();
}
Я думаю, что этот алгоритм слишком медленный для большого количества имен, и после нескольких проб и ошибок я решил добавить SEARCHROWLIMIT, чтобы прервать операцию
И я также думаю, что есть несколько готовых методов, которые могут это сделать.
И еще одна проблема - мне нужно искать музыкальные инструменты по категориям, таким как струны, ударные, ... и по стране происхождения. Поэтому мне нужно искать их с фильтром по типу и стране.
Как мне этого добиться?