Sorting Arrays
Sorting Arrays [C#]
This example shows how to sort arrays in C#. Array can be sorted using static method Array.Sortwhich internally use Quicksort algorithm.
Sorting array of primitive types
To sort array of primitive types such as int, double or string use method Array.Sort(Array) with the array as a paramater. The primitive types implements interface IComparable, which is internally used by the Sort method (it calls IComparable.CompareTo method). See example how to sort int array:
[C#]
// sort int array int[] intArray = new int[5] { 8, 10, 2, 6, 3 }; Array.Sort(intArray); // write array foreach (int i in intArray) Console.Write(i + " "); // output: 2 3 6 8 10
or how to sort string array:
[C#]
// sort string array string[] stringArray = new string[5] { "X", "B", "Z", "Y", "A" }; Array.Sort(stringArray); // write array foreach (string str in stringArray) Console.Write(str + " "); // output: A B X Y Z
Sorting array of custom type using delegate
To sort your own types or to sort by more sophisticated rules, you can use delegate to anonymous method. The generic delegate Comparison<T> is declared as public delegate int Comparison<T> (T x, T y)
. It points to a method that compares two objects of the same type. It should return less then 0 when X < Y, zero when X = Y and greater then 0 when X > Y. The method (to which the delegate points) can be also an anonymous method (written inline).
Following example demonstrates how to sort an array of custom type using the delegate to anonynous comparison method. The custom type in this case is a class User with properties Name and Age.
[C#]
// array of custom type User[] users = new User[3] { new User("Betty", 23), // name, age new User("Susan", 20), new User("Lisa", 25) };
[C#]
// sort array by name Array.Sort(users, delegate(User user1, User user2) { return user1.Name.CompareTo(user2.Name); }); // write array (output: Betty23 Lisa25 Susan20) foreach (User user in users) Console.Write(user.Name + user.Age + " ");
[C#]
// sort array by age Array.Sort(users, delegate(User user1, User user2) { return user1.Age.CompareTo(user2.Age); // (user1.Age - user2.Age) }); // write array (output: Susan20 Betty23 Lisa25) foreach (User user in users) Console.Write(user.Name + user.Age + " ");
Sorting array using IComparable
If you implement IComparable interface in your custom type, you can sort array easily like in the case of primitive types. The Sort method calls internally IComparable.CompareTo method.
[C#]
// custom type public class User : IComparable { // ... // implement IComparable interface public int CompareTo(object obj) { if (obj is User) { return this.Name.CompareTo((obj as User).Name); // compare user names } throw new ArgumentException("Object is not a User"); } }
Use it as you sorted the primitive types in the previous examples.
[C#]
// sort using IComparable implemented by User class Array.Sort(users); // sort array of User objects
'Programming > C#' 카테고리의 다른 글
[C#] 시간체크(Stopwatch) (0) | 2015.09.15 |
---|---|
[오류] 'Microsoft.ACE.OLEDB.12.0' 공급자는 로컬 컴퓨터에 등록할 수 없습니다. (0) | 2015.02.12 |
Sort a Custom Class List<T> (0) | 2014.09.29 |
Sheet Name에 만들지도 않은 '_xlnm#_FilterDatabase'이 포함된 Sheet가 보일 때.. (0) | 2014.09.17 |
Google Protocol Buffer 사용해보기 with C# (0) | 2014.09.16 |