gpt4 book ai didi

c# - 如何覆盖 C# 中两个字符串的一般比较

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:56 26 4
gpt4 key购买 nike

我有一个类似下面链接的问题,但要复杂得多: Ignoring accented letters in string comparison

我有一本字典,里面有一些值,比如:

{[Ministère de l'économie, 139]}
{[Ministère des finances, 114]}

为了将新元素插入到字典中,作为相同的代码,我这样写:

if (!dict.ContainsKey(str))
{ dict.Add(str, Convert.ToDouble(number)); }

但是当我想检查这个值是否存在时:{[Ministère de l'economie, 139]} 它返回它不存在。

我怎样才能对我的代码实现这种响应?

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace); 

另一方面,正如我的问题标题,我如何在我的应用程序中覆盖一般(或主要)字符串比较方法?

最佳答案

因此,结合 linked answer for removal of accents and diacritics , 你可以制作一个 IEqualityComparer<string>提供给你的字典:

public class IgnoreAccentsAndDiacriticsComparer:IEqualityComparer<string>
{
public bool Equals(string left, string right)
{
if(left == null && right == null){ return true; }
if(left == null || right == null){ return false; }
return string.Equals(RemoveDiacritics(left), RemoveDiacritics(right));
}

public int GetHashCode(string txt)
{
return RemoveDiacritics(txt).GetHashCode();
}

static string RemoveDiacritics(string text)
{
string formD = text.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();

foreach (char ch in formD)
{
UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch);
if (uc != UnicodeCategory.NonSpacingMark)
{
sb.Append(ch);
}
}

return sb.ToString().Normalize(NormalizationForm.FormC);
}
}

现在,使用这个比较器的一个实例构造你的字典:

var myDic = new Dictionary<string, int>(new IgnoreAccentsAndDiacriticsComparer())

并尝试添加重音符号:

myDic["Aimée"] = 1;

...然后把它读出来,不带重音:

Console.WriteLine(myDic["Aimee"]); //ŵôõ!

关于c# - 如何覆盖 C# 中两个字符串的一般比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com