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