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 + " ");