Как реализовать возрастающий поиск в списке

Пожалуйста, попробуйте это.

 Grid.Children.OfType<Button>().Where(Child => Child.Content.ToString() == "234").All(x =>
            {
                x.Content = "123";
                return true;
            });
7
задан Nietzche-jou 18 March 2009 в 13:25
поделиться

6 ответов

Я должен был сделать что-то подобное в прошлом использование набора, который содержал приблизительно 500 000 слов. Я нашел, что направленный нециклический график слова работал хорошо. DAWG имеет примерно то же представление в качестве trie, но будет большим количеством эффективного пространства. Это, однако, немного более сложно для реализации.

К сожалению, моя работа была в C, и у меня нет хорошей ссылки для реализации DAWG в C#.

4
ответ дан 6 December 2019 в 21:20
поделиться

Вы могли просто посмотреть на недавно вводимую букву; если новая третья буква ',' справедливое выводит все элементы без в положении три. Если пользователь удаляет букву, необходимо повторно просканировать целый исходный список и возвратить все ранее удаленные объекты.

Но что, если пользователь вставляет несколько букв от буфера обмена, удаляет несколько букв путем выбора их, вставляет или удаляет сингл или несколько букв где-нибудь в середине?

Вы имеете только ко многим случаям для наблюдения за. Вы могли сделать метод с недавно вводимой буквой падение назад к полному пересканированию, если бы искомый текст изменился способом кроме добавления одной буквы, но даже этот простой метод, вероятно, не стоит усилия только для ухода от некоторых десять или сотня сравнений строк. Как уже упомянуто, Trie или Patricia trie являются способом пойти, если Вы имеете действительно большие наборы данных или хотите быть действительно быстрыми.

6
ответ дан 6 December 2019 в 21:20
поделиться

Ниже функция, которая будет инкрементно искать строку подстроку для соответствия.

public IEnumerable<int> FindAllMatches(string toMatch, string source) {
  var last = 0;
  do {
    var cur = source.IndexOf(toMatch,last);
    if ( cur < 0 ) {
      break;
    }
    yield return cur;
    last = cur + toMatch.Length;
  while(true);
}
0
ответ дан 6 December 2019 в 21:20
поделиться

trie структура данных масштабировалась бы хорошо, если Ваш список может вырасти до значительной длины (больше чем сотни записей). Выезд, например, эта реализация в качестве примера.

2
ответ дан 6 December 2019 в 21:20
поделиться

Стоп...

Просто используйте встроенную функциональность AutoComplete на текстовом поле. Можно предоставить ему список слов, и это сделает соответствие для Вас.

0
ответ дан 6 December 2019 в 21:20
поделиться

Вместо массива строк Вы могли использовать универсальный набор. Таким образом, можно использовать метод FindAll с делегатом для поиска объектов.

string searchString = "s";
List<string> sl = new List<string>();
sl.Add("store");
sl.Add("state");
sl.Add("stamp");
sl.Add("crawl");
sl.Add("crow");
List<string> searchResults = sl.FindAll(delegate(string match) 
                                                { 
                                                    return   match.StartsWith(searchString, StringComparison.CurrentCultureIgnoreCase); 
                                                });
0
ответ дан 6 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: