Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#字符串比较忽略变音符号,unicode半空间(\u200c)除外_C#_.net_Wpf_String_String Comparison - Fatal编程技术网

C#字符串比较忽略变音符号,unicode半空间(\u200c)除外

C#字符串比较忽略变音符号,unicode半空间(\u200c)除外,c#,.net,wpf,string,string-comparison,C#,.net,Wpf,String,String Comparison,我有一个ICollectionView绑定到一个DataGrid,其中包含100万项,应该在搜索文本框中作为用户类型进行过滤。由于项目数量庞大,过滤算法应该是性能友好的 这是我当前的字符串比较(筛选方法的某些部分): CompareOptions.IgnoreNonSpace很好地忽略了发音符号,但也忽略了Unicode\u200c的半空格,这不是我想要的。我只想忽略变音符号 bool compare1 = AreEqual("آبی","آبی"); //true, It's Okay. b

我有一个
ICollectionView
绑定到一个DataGrid,其中包含100万项,应该在搜索文本框中作为用户类型进行过滤。由于项目数量庞大,过滤算法应该是性能友好的

这是我当前的字符串比较(筛选方法的某些部分):

CompareOptions.IgnoreNonSpace
很好地忽略了发音符号,但也忽略了Unicode\u200c的半空格,这不是我想要的。我只想忽略变音符号

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
,在用户读取当前
DataGrid
视口时,返回前10个结果并继续在后台线程中搜索。当用户滚动数据网格时,显示在后台线程中过滤的下10个结果。我不希望用户等待
CollectionView
完成对100万项的筛选。

您可以尝试对大型数据集使用我将规范化字符串与原始字符串存储在同一数据集中。并仅对用户键入的文本进行规范化,并与已规范化的数据进行比较。在我的例子中,有20000个值,不是一个大的集合。但是它很有魅力。@aepot我讨厌这种类型的数据冗余:)@PavelAnikhouski我想要的是有点复杂,我正在寻找一个代码示例来实现我的算法。我知道这对我有帮助,但将其与UI和数据模板合并比我的经验更复杂。您可以尝试使用大型数据集,我将规范化字符串与原始字符串存储在同一数据集中。并仅对用户键入的文本进行规范化,并与已规范化的数据进行比较。在我的例子中,有20000个值,不是一个大的集合。但是它很有魅力。@aepot我讨厌这种类型的数据冗余:)@PavelAnikhouski我想要的是有点复杂,我正在寻找一个代码示例来实现我的算法。我知道这对我有帮助,但将其与UI和数据模板合并比我的经验更复杂。
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.