У меня есть ICollectionView
, привязанный к DataGrid, который содержит 1 миллион элементов и должен быть отфильтрован как пользовательский тип в текстовом поле поиска. Из-за большого количества элементов алгоритм фильтрации должен быть дружественным к производительности.
Это мое текущее сравнение строк (некоторая часть метода фильтрации):
static bool AreEqual(string str1, string str2)
{
var compareInfo = CultureInfo.InvariantCulture.CompareInfo;
bool result = compareInfo.IndexOf(str1, str2, CompareOptions.IgnoreNonSpace) > -1;
return result;
}
CompareOptions.IgnoreNonSpace
очень хорошо игнорирует диакритические знаки, но игнорирует также половину пробела с Unicode \ u200 c, также что не то, что я хочу. Я просто хочу игнорировать диакритические знаки.
bool compare1 = AreEqual("آبی","آبی"); //true, It's Okay.
bool compare2 = AreEqual("آبی", "ابی"); //true. It's Okay.
bool compare3 = AreEqual("آبی", "آبی"); //true. This is not what I want. It should return false
bool compare4 = AreEqual("آبی", "ابی"); //true. This is not what I want. It should return false.
Поскольку производительность является критической, я не могу удалить диакритические знаки с помощью нормализующих строк перед сравнением.
Еще один вопрос :
Я хочу отфильтровать CollectionView
таким образом, чтобы первые 10 результатов возвращались и продолжали поиск в фоновом потоке, пока пользователь читает текущий DataGrid
видовой экран. Когда пользователь прокручивает DataGrid
, показываются следующие 10 результатов, которые фильтруются в фоновом потоке. Я не хочу, чтобы пользователь ждал, пока CollectionView
завершит sh фильтрацию 1 миллиона элементов.