4 способа сортировки массива в C#

В C# мы можем сортировать массив несколькими способами.

1. Использование Array.Sort (Array)

//Сортировка массива Int
class Program
{
    public static int i = 0;
    public static void Main()
    {
        // Сортировка int массива
        int[] intArray = new int[5] { 34,23,41,89,77 };
        Array.Sort(intArray);
        // написать массив
        foreach (int i in intArray)
        Console.Write(i + " ");  
    }
}
// output: 23 34 41 77 89
 
//Сортировка массива String
class Program
{
    public static int i = 0;
    public static void Main()
    {
        // sort string array
        string[] stringArray = new string[5] { "Csharp", "ASP.net", "EntityFramework", "ADO.net", "WCF" };
        Array.Sort(stringArray);
        // write array
        foreach (string str in stringArray) Console.Write(str + " ");
    }
}
 
//Output:
ADO.net ASP.net Csharp EntityFramework WCF

2. Использование интерфейса IComparable

//Шаг 1: рассмотрим CarClass
class Car
{
    public string Make{ set; get; }
    public int Year{ set; get; }
    public string Location { set; get; }
}
 
//Шаг 2. Внедрение интерфейса IComparable
public int CompareTo(object obj)
{
  if (obj is Car)
  {
    Car c2 = (Car)obj;
    return Make.CompareTo(c2.Make);
  }
  else
    throw new ArgumentException("Object is not of type Car.");
}
 
 
//Шаг 3: Проверка сортировки по марке
Car objCar = new Car();
ArrayList carArray = new ArrayList();
 
objCar.Make = "Audi";
objCar.Year = 2014;
objCar.Location = "Georgia";
carArray.Add(objCar);
objCar = null;
 
objCar = new Car();
objCar.Make = "Mercedes";
objCar.Year = 2005;
objCar.Location = "Newyork";
carArray.Add(objCar);
objCar = null;
 
objCar = new Car();
objCar.Make = "Toyota";
objCar.Year = 1999;
objCar.Location = "California";
carArray.Add(objCar);
objCar = null;
 
carArray.Sort();
// Вы получите carArray, отсортированный по алфавиту по Make.

3. Использование интерфейса IComparer

//Шаг 1. Создайте класс CarComparer, который реализует интерфейс IComparer
class CarComparer : IComparer
{
    public enum ComparisonType
    {
        Make = 1, Year, Location
    }
 
    public ComparisonType ComparisonMethod
    {
        set;
        get;
    }
 
    public int Compare(object x, object y)
    {
        Car c1;
        Car c2;
 
        if (x is Car)
            c1 = x as Car;
        else
            throw new ArgumentException("Object is not of type Car.");
 
        if (y is Car)
            c2 = y as Car;
        else
            throw new ArgumentException("Object is not of type Car.");
 
        return c1.CompareTo(c2, ComparisonMethod);
    }
}
//Шаг 2: добавьте перегруженный CompareTo в класс автомобиля
public int CompareTo(Car c2, CarComparer.ComparisonType comparisonType)
{
  switch (comparisonType)
  {
    case CarComparer.ComparisonType.Make:
      return Make.CompareTo(c2.Make);
    case CarComparer.ComparisonType.Year:
      return Year.CompareTo(c2.Year);
    case CarComparer.ComparisonType.Location:
      return Location.CompareTo(c2.Location);
    default:
      return Make.CompareTo(c2.Make);
  }
}
 
//Шаг 3: Теперь протестируйте его
Car objCar = new Car();
ArrayList carArray = new ArrayList();
 
objCar.Make = "Audi";
objCar.Year = 2014;
objCar.Location = "Georgia";
carArray.Add(objCar);
objCar = null;
objCar = new Car();
objCar.Make = "BMW";
objCar.Year = 2005;
objCar.Location = "Newyork";
carArray.Add(objCar);
objCar = null;
 
objCar = new Car();
objCar.Make = "Mercedes";
objCar.Year = 1999;
objCar.Location = "Ohio";
carArray.Add(objCar);
objCar = null;
 
CarComparer carComparer = new CarComparer();
carComparer.ComparisonMethod = CarComparer.ComparisonType.Location;
carArray.Sort(carComparer);
 
//Мы использовали перегруженный метод сортировки, который принимает экземпляр класса CarComparer.
//Чтобы отсортировать по другим свойствам, измените метод ComparisonMethod, как показано ниже.
carComparer.ComparisonMethod = CarComparer.ComparisonType.Year

4. Использование делегата для анонимного метода

 // массив Employeetype
        Employee[] emp = new Employee[3] { new Employee("Bunny", 23),  // name, age
                             new Employee("Susan", 20),
                             new Employee("Tina", 25) };
 
 
// сортировать массив по имени
        Array.Sort(emp, delegate(Employee emp1, Employee emp2)
        {
                    return emp1.Name.CompareTo(emp2.Name);
                  });
// написать массив (output: Bunny23 Susan20 Tina25)
        foreach (Employee e in emp) Console.Write(e.Name + e.Age + " ");
 
 
// сортировать массив по возрасту
        Array.Sort(emp, delegate(Employee emp1, Employee emp2)
        {
                    return emp1.Age.CompareTo(emp2.Age); // (emp1.Age - emp2.Age)
                  });
// написать массив (output: Susan20 Bunny23 Tina25)
        foreach (Employee e in emp) Console.Write(e.Name + e.Age + " ");

 
Источник: http://www.csharpstar.com/sort-array/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector