Csharp/CSharp Tutorial/Generic/Generic IComparable

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

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