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