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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值