📌  相关文章
📜  C#|对ArrayList中的元素进行排序

📅  最后修改于: 2021-05-29 20:04:42             🧑  作者: Mango

ArrayList.Sort方法用于对ArrayList中的元素进行排序。此方法的重载列表中共有3种方法,如下所示:

  1. 种类()
  2. 排序(IComparer)
  3. 排序(Int32,Int32,IComparer)

种类()

此方法用于对整个ArrayList中的元素进行排序。它使用QuickSort算法对ArrayList的元素进行排序。

注意:此方法是O(n log n)运算,其中n是Count,在最坏的情况下,它是O(n ^ 2)运算。

句法:

public virtual void Sort ();

异常:如果ArrayList为只读,则此方法将提供NotSupportedException。

例子:

// C# program to illustrate Sort() Method
using System;
using System.Collections;
  
class GFG {
  
    // Main method
    public static void Main()
    {
  
        // create and initalize new ArrayList
        ArrayList mylist = new ArrayList();
        mylist.Add("Welcome");
        mylist.Add("to");
        mylist.Add("Geeks");
        mylist.Add("for");
        mylist.Add("Geeks");
        mylist.Add("2");
  
        // ArrayList before sorting
        Console.WriteLine("ArrayList before sort:");
        foreach(string i in mylist)
        {
            Console.WriteLine(i);
        }
        Console.WriteLine();
          
          
        Console.WriteLine("ArrayList after sort:");
  
        // sort the ArrayList
        // using Sort() method
        mylist.Sort();
  
        // ArrayList after sort
        foreach(string i in mylist)
        {
            Console.WriteLine(i);
        }
    }
}

输出:

ArrayList before sort:
Welcome
to
Geeks
for
Geeks
2

ArrayList after sort:
2
for
Geeks
Geeks
to
Welcome

排序(IComparer)

此方法用于使用指定的比较器对整个ArrayList中的元素进行排序。此方法是O(n log n)操作,其中n是Count;在最坏的情况下,它是O(n ^ 2)运算。

句法:

public virtual void Sort (IComparer comparer);

在这里,比较元素时使用IComparer实现。

例外情况:

  • NotSupportedException:如果ArrayList为只读。
  • InvalidOperationException:由于在比较两个元素时发生错误。
  • ArgumentException:如果为比较器传递了null,并且列表中的元素未实现IComparable。

例子:

// C# program to illustarte Sort(IComparer) Method
using System;
using System.Collections;
  
class GFG {
      
    // Calls CaseInsensitiveComparer.Compare
    // with the parameters reversed.
    public class myClass : IComparer {
          
        int IComparer.Compare(Object a, Object b)
        {
            return ((new CaseInsensitiveComparer()).Compare(b, a));
        }
    }
      
    // Main method
    public static void Main()
    {
  
        // create and initalize new ArrayList, i.e. mylist
        ArrayList mylist = new ArrayList();
        mylist.Add("Welcome");
        mylist.Add("to");
        mylist.Add("geeks");
        mylist.Add("for");
        mylist.Add("geeks");
        mylist.Add("2");
  
        IComparer Comp1 = new myClass();
  
        // sort the value of ArrayList
        // using Sort(IComparer) method
        mylist.Sort(Comp1);
  
        foreach(Object ob in mylist)
        {
            Console.WriteLine(ob);
        }
    }
}

输出:

Welcome
to
geeks
geeks
for
2

排序(Int32,Int32,IComparer)

此方法用于使用指定的比较器对ArrayList中的一系列元素进行排序。

注意:此方法是O(n log n)运算,其中n是count,在最坏的情况下,它是O(n ^ 2)运算。

句法:

public virtual void Sort (int index, int count, IComparer comparer);

参数:

  • index:要排序的范围的从零开始的索引,此参数的类型为System.Int32。
  • count:计算要排序的范围的长度,此参数的类型为System.Int32
  • 比较器:在元素比较期间使用的是IComparer实现。

例外情况:

  • NotSupportedException:如果ArrayList为只读。
  • InvalidOperationException:由于在比较两个元素时发生错误。
  • ArgumentException:如果索引计数未在ArrayList中指定有效范围。
  • ArgumentOutOfRangeException:如果索引小于零。

例子:

// C# program to illustrate the use of
// Sort(Int32, Int32, IComparer) Method
using System;
using System.Collections;
  
class GFG {
  
    // Main method
    public static void Main()
    {
          
        // create and initalize new ArrayList
        ArrayList mylist = new ArrayList();
        mylist.Add("Welcome");
        mylist.Add("to");
        mylist.Add("geeks");
        mylist.Add("for");
        mylist.Add("GFG");
        mylist.Add("2");
  
        // sort the value of ArrayList from 0 to 4
        // using Sort( Int32, Int32, IComparer) method
        // here the value of IComparer is null
        mylist.Sort(0, 4, null);
  
        // Display the sorted string
        foreach(string ob in mylist)
        {
            Console.WriteLine(ob);
        }
    }
}

输出:

for
geeks
to
Welcome
GFG
2

参考:

  • https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.arraylist.sort?view=netframework-4.7.2