Csharp/CSharp Tutorial/Generic/Generic IComparable
Implement generic IComparable <T>.
<source lang="csharp">using System; using System.Collections.Generic;
// Implement the generic IComparable<T> interface. class Product : IComparable<Product> {
string name; double cost; int onhand; public Product(string n, double c, int h) { name = n; cost = c; onhand = h; } public override string ToString() { return String.Format("{0,-10}Cost: {1,6:C} On hand: {2}", name, cost, onhand); } // Implement the IComparable<T> interface. public int CompareTo(Product obj) { return name.rupareTo(obj.name); }
}
class MainClass {
public static void Main() { List<Product> inv = new List<Product>(); // Add elements to the list inv.Add(new Product("A", 5.5, 3)); inv.Add(new Product("B", 8.9, 2)); inv.Add(new Product("C", 3.0, 4)); inv.Add(new Product("D", 1.8, 8)); Console.WriteLine("Product list before sorting:"); foreach(Product i in inv) { Console.WriteLine(" " + i); } Console.WriteLine(); // Sort the list. inv.Sort(); Console.WriteLine("Product list after sorting:"); foreach(Product i in inv) { Console.WriteLine(" " + i); } }
}</source>
Product list before sorting: A Cost: $5.50 On hand: 3 B Cost: $8.90 On hand: 2 C Cost: $3.00 On hand: 4 D Cost: $1.80 On hand: 8 Product list after sorting: A Cost: $5.50 On hand: 3 B Cost: $8.90 On hand: 2 C Cost: $3.00 On hand: 4 D Cost: $1.80 On hand: 8
Sort and search an array of objects
<source lang="csharp">using System;
class MyClass : IComparable<MyClass> {
public int i; public MyClass(int x) { i = x; } // Implement IComparable<MyClass>. public int CompareTo(MyClass v) { return i - v.i; }
}
class MainClass {
public static void Main() { MyClass[] nums = new MyClass[5]; nums[0] = new MyClass(5); nums[1] = new MyClass(2); nums[2] = new MyClass(3); nums[3] = new MyClass(4); nums[4] = new MyClass(1); Console.Write("Original order: "); foreach(MyClass o in nums) Console.Write(o.i + " "); Console.WriteLine(); Array.Sort(nums); Console.Write("Sorted order: "); foreach(MyClass o in nums) Console.Write(o.i + " "); Console.WriteLine(); MyClass x = new MyClass(2); int idx = Array.BinarySearch(nums, x); Console.WriteLine("Index of MyClass(2) is " + idx); }
}</source>
Original order: 5 2 3 4 1 Sorted order: 1 2 3 4 5 Index of MyClass(2) is 1