목록에서 이름을 검색하는 프로그램을 프로그래밍 중이며 키워드가 이름 앞에 없더라도 찾을 필요가 있습니다. 비 접두어)접두어가 아닌 키워드를 사용하여 목록에서 검색하는 방법
예 : 내 목록이 음악 악기 인 경우이고 검색 텍스트 상자에 "guit"을 입력합니다.
그것은 이름 "기타, Guitarrón, 어쿠스틱 기타,베이스 기타, ..."
또는이 Longdo Dictionary's 검색 제안 같은 것을 찾아야한다. 여기
내 단순하고 바보 알고리즘 (즉, 내가 할 수있는 전부)
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를 추가하여 작업을 중단하기로 결정했습니다. 그리고이를 수행 할 수있는 몇 가지 방법이 있다고 생각합니다.
또 다른 문제는 문자열, 타악기, ... 및 해당 국가의 음악 악기를 검색해야합니다. 그래서 필터를 유형 및 국가별로 검색해야합니다.
어떻게하면됩니까?
예제는 검색어가 단어의 시작 부분에있는 경우에만 제공됩니다. 'abcxyzdef'와 같은 용어에서'xyz'를 검색하는 것과 같이 단어 중간에 있다면 어떨까요? –