数组列表排序中的数组列表

本文关键字:数组 列表 排序 | 更新日期: 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()