数组列表排序中的数组列表
本文关键字:数组 列表 排序 | 更新日期: 2023-09-27 17:53:02
我有一个数组列表。它保存了数组列表。例如,
ar1 -> {2,3,46,67} keeps 4 members.
ar2 -> {28,96,67} keeps 3 members.
ar2 -> {56,32,67,54,214} keeps 5 members.
Ar_main[0]= ar1
Ar_main[1]= ar2
Ar_main[2]= ar3
我想对ar_main按成员数排序。我使用冒泡排序算法。但是它不起作用,我们不能像这样对数组列表排序吗?
private void sortArrayToAscending(ArrayList ar)
{
ArrayList ar1,ar2;
for (int i = 0; i < ar.Count - 1; i++)
for (int j = 1; j < ar.Count - i; j++)
{
ar1 = (ArrayList)ar[j];
ar2 = (ArrayList)ar[j-1];
if (ar1.Count < ar2.Count)
{
ArrayList temp = ar2;
ar2=ar1;
ar1=temp;
}
}
}
在ArrayList
中有一个内置的Sort
方法为您进行排序。你必须提供的是一个IComparer
实现,比较列表,使它们的长度标准:
public void ArrayListSort()
{
var list = new ArrayList();
list.Sort(new LengthComparer());
}
class LengthComparer : IComparer
{
public int Compare(object x, object y)
{
var a = x as ArrayList;
var b = y as ArrayList;
// check for null if you need to!
return a.Count.CompareTo(b.Count);
}
}
但是,除非您实际使用。net 1.1,否则我建议您使用List<T>
而不是ArrayList
,以及LINQ OrderBy
方法。这是类型安全的,我认为它现在更符合c#的习惯。最重要的是,它更短:
var typedList = new List<List<int>>();
var sortedList = typedList.OrderBy(i => i.Count).ToList();
请注意,前者是就地排序(改变原始列表),而后者将结果复制到新列表中。
我现在还不能评论,否则我会的。c#在ArrayList类中包含了一个内置的静态方法。它使用快速排序算法进行排序。你可以试一试,看看是否有帮助。
Microsoft API Documentation ArrayList.Sort()