当前位置: 首页 > news >正文

c#编程:定义比较器,ArrayList使用比较器进行排序

ArrayList 是 .NET Framework 1.1 引入的一个非泛型集合类型在 C# 现代版本中推荐使用泛型集合如 List 来代替 ArrayList,因为它们提供了更好的类型安全性和性能

ArrayList 中的元素按照指定顺序进行排序,可以使用 ArrayList.Sort() 方法。然而,默认情况下,ArrayList 的 Sort() 方法要求集合中的所有元素都能相互比较(即实现了 IComparable 接口,比如string、int这种类型的都可以)。

对于更复杂的排序逻辑,你需要创建一个实现了 IComparer 接口的类,并将其传递给 Sort 方法。
例希望根据ArrayList中存储的字符串的 长度做关键字来排序,以下是示例代码

using System;
using System.Collections;
using System.Collections.Generic;

//创建了一个名为 StringLengthComparer 的类,它实现了 IComparer 接口
class StringLengthComparer : IComparer
{
	//重写了 Compare 方法以根据字符串的长度来进行比较
    public int Compare(object x, object y)
    {
        string s1 = x as string;
        string s2 = y as string;
        
        if (s1 == null || s2 == null)
        {
            throw new ArgumentException("Both objects must be strings.");
        }

        return s1.Length.CompareTo(s2.Length); // 按字符串长度比较
    }
}

class Program
{
    static void Main()
    {
        ArrayList arrayList = new ArrayList() { "apple", "banana", "pear", "kiwi" };

        arrayList.Sort(new StringLengthComparer()); // 使用自定义比较器按长度排序

        foreach (var item in arrayList)
        {
            Console.WriteLine(item);
        }
    }
}

请注意,由于 ArrayList 是非泛型集合,所以在处理时需要进行适当的类型检查和转换。在现代C#编程中,推荐使用泛型集合(如 List)代替 ArrayList 以提高代码的安全性和性能。对于泛型集合,可以更方便地使用 Lambda 表达式或 LINQ 提供排序功能

相关文章:

  • 【Python项目】基于Python的病人信息管理系统
  • MFC中CString的Format、与XML中的XML_SETTEXT格式化注意
  • 重装CentOS YUM
  • AI基础:数据可视化简易入门(Matplotlib和Seaborn)
  • Python实战:Excel中文转拼音工具开发教程
  • Spring Boot项目@Cacheable注解的使用
  • 【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较
  • 【动态规划篇】:解析背包问题--动态规划塑造的算法利器
  • vue中的watch 和 computed 的区别
  • 【spring】静态代理与动态代理 | AOP面向切面编程
  • 【论文精读】VLM-AD:通过视觉-语言模型监督实现端到端自动驾驶
  • DeepSeek破局启示录:一场算法优化对算力霸权的降维打击
  • 【机器学习】多元线性回归算法和正规方程解求解
  • LLaVA-CoT: Let Vision Language Models Reason Step-by-Step论文解读
  • Websocket——心跳检测
  • 大语言模型推理能力从何而来?
  • opencv实时二维码识别的一种实现与思路分享
  • pandas数据存到informix数据库
  • 14.5 Auto-GPT:基于Agent的AGI实验如何重新定义人工智能未来?
  • 面向机器学习的Java库与平台简介、适用场景、官方网站、社区网址
  • 网站建设电话销售话术实例/莱阳seo外包
  • 西安做网站建设的/注册百度推广账号
  • 鄂州手机网站设计/网站推广怎么弄
  • 做网站背景全覆盖的代码/企业产品推广运营公司
  • 保险做的好的网站有哪些/今日重大新闻头条十条
  • 买正品去哪个网站最好/新开发的app怎么推广