• StringComparer 几个用法举例


    StringComparer 在 C# 中是一个提供多种字符串比较规则的类,主要用于确定字符串的排序顺序或相等性。以下是 StringComparer 的几个用法举例:

    1. 在字典(Dictionary)中使用
    当你想在字典中存储字符串作为键,并且希望这些键在比较时忽略大小写时,可以使用 StringComparer.OrdinalIgnoreCase 作为字典的构造函数参数

     
     

    1.  
    2. var dictionary = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);  
    3. dictionary.Add("apple", 1);  
    4. dictionary.Add("Banana", 2); // 尽管 "Banana" 和 "apple" 大小写不同,但它们被视为相同的键  
    5.   
    6. int value;  
    7. if (dictionary.TryGetValue("APPLE", out value))  
    8. {  
    9.     Console.WriteLine($"Found 'APPLE' (case-insensitive): {value}"); // 输出 2  
    10. }


    2. 在列表(List)中使用进行排序
    虽然 StringComparer 本身不直接用于 List.Sort 方法,但你可以通过提供一个自定义的比较器来实现类似的功能。不过,更常见的是使用 List.Sort 的重载版本,它接受一个 Comparison 委托或 IComparer 接口的实现。不过,为了展示 StringComparer 的用法,我们可以将其与 Array.Sort 或 LINQ 的 OrderBy 方法结合使用来排序字符串数组或列表。

     

    1. string[] words = { "banana", "Apple", "cherry", "Date" };  
    2. Array.Sort(words, StringComparer.OrdinalIgnoreCase);  
    3.   
    4. foreach (var word in words)  
    5. {  
    6.     Console.WriteLine(word); // 输出按字典序(忽略大小写)排序的字符串  
    7. }  


      
    // 或者使用 LINQ  
    var sortedWords = words.OrderBy(w => w, StringComparer.OrdinalIgnoreCase).ToList();
    3. 在集合(如 HashSet)中使用
    类似地,当你想在 HashSet 或其他集合中存储字符串,并且希望这些集合在添加或检查成员时忽略大小写差异时,可以使用 StringComparer.OrdinalIgnoreCase。但是,请注意,HashSet 没有直接接受 IEqualityComparer 作为构造函数参数的版本。相反,你需要创建一个新的 HashSet,并通过其 Comparer 属性来指定比较器,尽管这通常是在创建集合之后通过属性设置来完成的。不过,更常见的是通过 HashSet.HashSet(IEnumerable, IEqualityComparer) 构造函数来初始化集合并指定比较器。

     
     

    1. var hashSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);  
    2. hashSet.Add("apple");  
    3. hashSet.Add("Banana"); // 这个添加操作实际上不会添加新元素,因为 "Banana" 和 "apple" 被视为相等  
    4.   
    5. Console.WriteLine(hashSet.Contains("APPLE")); // 输出 True


    4. 在数组或列表的查找操作中使用
    虽然 StringComparer 本身不直接提供查找功能,但你可以在使用如 Array.Find、Array.FindIndex、Array.Exists 或 LINQ 的查询方法时,通过传递一个使用 StringComparer 的 lambda 表达式来实现忽略大小写的查找。

    1.  
    2. string[] fruits = { "apple", "banana", "cherry" };  
    3. int index = Array.FindIndex(fruits, fruit => StringComparer.OrdinalIgnoreCase.Equals(fruit, "BANANA"));  
    4. if (index != -1)  
    5. {  
    6.     Console.WriteLine($"Found 'BANANA' (case-insensitive) at index {index}"); // 输出索引  
    7. }  
    8.   
    9. // 或者使用 LINQ  
    10. var foundFruit = fruits.FirstOrDefault(fruit => StringComparer.OrdinalIgnoreCase.Equals(fruit, "BANANA"));  
    11. if (foundFruit != null)  
    12. {  
    13.     Console.WriteLine($"Found '{foundFruit}' (case-insensitive)");  
    14. }


    请注意,上述示例中的 Array.FindIndex 和 LINQ 查询都使用了 StringComparer.OrdinalIgnoreCase.Equals 方法来比较字符串,从而实现了忽略大小写的查找。

  • 相关阅读:
    完全学会并掌握这 11 个方法论,让你轻松搞定一场完美技术面试
    C- qsort()
    深度学习Course5第三周Sequence Models & Attention Mechanism习题整理
    Python 初学者容易踩的 5 个坑
    【FOC】FOC控制流程图
    自动部署工具PM2
    Layui + Flask | 表单组件(组件篇)(07)
    Spring Boot 如何配置 CORS 支持
    leetcode:1967. 作为子字符串出现在单词中的字符串数目(python3解法)
    Java运算符和表达式
  • 原文地址:https://blog.csdn.net/zhang8593/article/details/140460896