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

news/2025/2/23 3:09:18

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 提供排序功能


http://www.niftyadmin.cn/n/5862927.html

相关文章

政安晨的AI大模型训练实践 九 - 熟悉LLaMA Factory的详细参数含义-基本概念理解一下

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 小伙伴铁子们,上手先熟悉起来训练工具的每一个参数,很重要。 参照我…

【Kubernets】Kubernets资源类型Deployment详细介绍

文章目录 Kubernets资源概览Kubernetes Deployment 资源类型详细介绍Deployment 的主要功能Deployment 的核心字段字段详解1. **metadata**2. **spec**3. **template**4. **containers**5. **strategy**6. **restartPolicy** Deployment 的生命周期Deployment 的常用操作1. 创建…

Canva迁移策略深度解析:应对每日5000万素材增长,从MySQL到DynamoDB的蜕变

随着数字化设计的蓬勃发展,Canva作为一款备受欢迎的在线设计平台,面临着日益增长的用户生成内容挑战。每天,平台上新增的素材数量高达5000万,这对数据库系统提出了前所未有的要求。为了应对这一挑战,Canva决定对其数据…

2.21力扣-回溯组合

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 一&#xff1a;JAVA class Solution {List<Integer> list new LinkedList<>();List<List<Integer>> ans new LinkedList<>();public List<List<Integer>> combine(int n, int k)…

day56 第十一章:图论part06

108.冗余连接 注意init初始化 改进&#xff1a; 其实只有一条边冗余&#xff0c;改为&#xff0c;如果两条边在同一个集合里&#xff0c;就输出&#xff0c;不然加入。 #include <iostream> #include <vector> using namespace std;int n 1005; vector<int>…

智能工业相机:重塑现代制造的视觉革命

在工业4.0的浪潮下&#xff0c;智能工业相机正从传统的“图像采集工具”进化为“产线决策大脑”。凭借多模态感知、边缘计算和自主决策能力&#xff0c;它正在颠覆制造业的质量控制、流程优化与生产管理方式。 智能工业相机已超越“替代人眼”的初级阶段&#xff0c;正在进化为…

Linux离线环境安装miniconda并导入依赖包

一、实现目标 在Linux离线环境中安装miniconda后&#xff0c;将联网环境中的依赖包导入到离线miniconda中&#xff0c;使得python项目在Linux离线环境中正常运行 二、前置条件 设备需要拷贝的文件联网Linux虚拟机miniconda安装包、依赖包、项目文件离线Linux虚拟机/ 三、实…

Linux 在云计算中的应用有哪些?

目录 Linux 在云计算中的应用 1. 云计算基础设施的核心 2. 虚拟化技术的基础 3. 容器化与微服务 4. 大数据与人工智能 5. 开源生态与社区支持 6. 在 Google Cloud 上运行 Linux 的优势 7. 边缘计算与物联网 总结 Linux 在云计算中的应用 Linux 作为开源操作系统的代表…