Csharp/CSharp Tutorial/Generic/Generic IComparable

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Implement generic IComparable <T>.

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); 
    } 
  } 
}
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

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); 
  }     
}
Original order: 5 2 3 4 1
Sorted order:   1 2 3 4 5
Index of MyClass(2) is 1