Предположим, что у меня есть коллекция (будь то массив, общий список или что-то самое быстрое решение этой проблемы) определенного класса, позвольте нам позвонить это ClassFoo
:Самый быстрый способ найти объекты из коллекции, соответствующие условию на члену строки
class ClassFoo
{
public string word;
public float score;
//... etc ...
}
Предположим, что будет, как 50.000 элементов в коллекции, все в памяти. Теперь я хочу, чтобы получить как можно быстрее все экземпляры в коллекции, которые подчиняются условие на его члене бара, например так:
List<ClassFoo> result = new List<ClassFoo>();
foreach (ClassFoo cf in collection)
{
if (cf.word.StartsWith(query) || cf.word.EndsWith(query))
result.Add(cf);
}
Как получить результаты как можно быстрее? Должен ли я рассматривать некоторые передовые методы индексирования и структуры данных?
Домен приложения для этой проблемы является автозаполнением, который получает запрос и дает набор предложений в результате. Предположим, что условие не становится более сложным, чем это. Предположим также, что будет много поисков.
Немного изменил вопрос и добавил: Домен приложения для этой проблемы - автозапуск, который получает запрос и дает набор предложений в результате. Предположим, что условие не становится более сложным, чем это. Предположим также, что будет много поисков. – 2008-09-18 22:26:10
Будет: сортировать его и использовать двоичный поиск Я мог бы сортировать коллекцию на члене строки. Но как я буду искать в нем двоичные файлы? Есть ли какой-то стандартный материал .NET для этого, или мне нужно написать двоичную древовидную структуру, в которой я вишу объекты? – 2008-09-18 22:34:47