<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FData_Structure%2FIComparable</id>
		<title>Csharp/CSharp Tutorial/Data Structure/IComparable - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FData_Structure%2FIComparable"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparable&amp;action=history"/>
		<updated>2026-04-29T17:29:33Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparable&amp;diff=5499&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparable&amp;diff=5499&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparable&amp;diff=5500&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparable&amp;diff=5500&amp;oldid=prev"/>
				<updated>2010-05-26T12:15:45Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==ComplexNumber: Implement System.IComparable==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;public class ComplexNumber : System.IComparable&lt;br /&gt;
{&lt;br /&gt;
   public ComplexNumber( int real, int imaginary )&lt;br /&gt;
   {&lt;br /&gt;
      this.real = real;&lt;br /&gt;
      this.imaginary = imaginary;&lt;br /&gt;
   }&lt;br /&gt;
   public override bool Equals( object obj )&lt;br /&gt;
   {&lt;br /&gt;
      ComplexNumber other = obj as ComplexNumber;&lt;br /&gt;
      if( other == null )&lt;br /&gt;
      {&lt;br /&gt;
         return false;&lt;br /&gt;
      }&lt;br /&gt;
      return (this.real == other.real) &amp;amp;&amp;amp; (this.imaginary == other.imaginary);&lt;br /&gt;
   }&lt;br /&gt;
   public override int GetHashCode()&lt;br /&gt;
   {&lt;br /&gt;
      return (int) real ^ (int) imaginary;&lt;br /&gt;
   }&lt;br /&gt;
   public static bool operator==( ComplexNumber me, ComplexNumber other )&lt;br /&gt;
   {&lt;br /&gt;
      return Equals( me, other );&lt;br /&gt;
   }&lt;br /&gt;
   public static bool operator!=( ComplexNumber me, ComplexNumber other )&lt;br /&gt;
   {&lt;br /&gt;
      return Equals( me, other );&lt;br /&gt;
   }&lt;br /&gt;
   public double Magnitude&lt;br /&gt;
   {&lt;br /&gt;
      get&lt;br /&gt;
      {&lt;br /&gt;
         return System.Math.Sqrt( System.Math.Pow(this.real, 2) + System.Math.Pow(this.imaginary, 2) );&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   public int CompareTo( object obj )&lt;br /&gt;
   {&lt;br /&gt;
      if( obj is ComplexNumber )&lt;br /&gt;
      {&lt;br /&gt;
         ComplexNumber other = (ComplexNumber) obj;&lt;br /&gt;
         if( (this.real == other.real) &amp;amp;&amp;amp;&lt;br /&gt;
             (this.imaginary == other.imaginary) )&lt;br /&gt;
         {&lt;br /&gt;
            return 0;&lt;br /&gt;
         }&lt;br /&gt;
         else if( this.Magnitude &amp;lt; other.Magnitude )&lt;br /&gt;
         {&lt;br /&gt;
            return -1;&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
            return 1;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
      else &lt;br /&gt;
      {&lt;br /&gt;
         throw new System.ArgumentException( &amp;quot;Wrong type&amp;quot; );&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   private double real;&lt;br /&gt;
   private double imaginary;&lt;br /&gt;
}&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
   static void Main()&lt;br /&gt;
   {&lt;br /&gt;
      ComplexNumber number1 = new ComplexNumber( 1, 2 );&lt;br /&gt;
      ComplexNumber number2 = new ComplexNumber( 1, 2 );&lt;br /&gt;
      ComplexNumber number3 = new ComplexNumber( 1, 3 );&lt;br /&gt;
      System.Console.WriteLine( number1.rupareTo(number2) );&lt;br /&gt;
      System.Console.WriteLine( number1.rupareTo(number3) );&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;0&lt;br /&gt;
-1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Define your own comparasion type and Comparer==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
    public class Employee : IComparable&amp;lt;Employee&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        private int empID;&lt;br /&gt;
        private int yearsOfSvc = 1;&lt;br /&gt;
        public Employee(int empID)&lt;br /&gt;
        {&lt;br /&gt;
            this.empID = empID;&lt;br /&gt;
        }&lt;br /&gt;
        public Employee(int empID, int yearsOfSvc)&lt;br /&gt;
        {&lt;br /&gt;
            this.empID = empID;&lt;br /&gt;
            this.yearsOfSvc = yearsOfSvc;&lt;br /&gt;
        }&lt;br /&gt;
        public override string ToString()&lt;br /&gt;
        {&lt;br /&gt;
            return &amp;quot;ID: &amp;quot; + empID.ToString() + &amp;quot;. Years of Svc: &amp;quot; + yearsOfSvc.ToString();&lt;br /&gt;
        }&lt;br /&gt;
        public bool Equals(Employee other) &lt;br /&gt;
        {&lt;br /&gt;
            if (this.empID == other.empID)&lt;br /&gt;
            {&lt;br /&gt;
                return true;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        public static EmployeeComparer GetComparer()&lt;br /&gt;
        {&lt;br /&gt;
            return new Employee.EmployeeComparer();&lt;br /&gt;
        }&lt;br /&gt;
        public int CompareTo(Employee rhs)&lt;br /&gt;
        {&lt;br /&gt;
            return this.empID.rupareTo(rhs.empID);&lt;br /&gt;
        }&lt;br /&gt;
        public int CompareTo(Employee rhs,Employee.EmployeeComparer.ruparisonType which)&lt;br /&gt;
        {&lt;br /&gt;
            switch (which)&lt;br /&gt;
            {&lt;br /&gt;
                case Employee.EmployeeComparer.ruparisonType.EmpID:&lt;br /&gt;
                    return this.empID.rupareTo(rhs.empID);&lt;br /&gt;
                case Employee.EmployeeComparer.ruparisonType.Yrs:&lt;br /&gt;
                    return this.yearsOfSvc.rupareTo(rhs.yearsOfSvc);&lt;br /&gt;
            }&lt;br /&gt;
            return 0;&lt;br /&gt;
        }&lt;br /&gt;
        public class EmployeeComparer : IComparer&amp;lt;Employee&amp;gt;&lt;br /&gt;
        {&lt;br /&gt;
            public enum ComparisonType&lt;br /&gt;
            {&lt;br /&gt;
                EmpID,&lt;br /&gt;
                Yrs&lt;br /&gt;
            };&lt;br /&gt;
            public bool Equals(Employee lhs, Employee rhs)&lt;br /&gt;
            {&lt;br /&gt;
                return this.rupare(lhs, rhs) == 0;&lt;br /&gt;
            }&lt;br /&gt;
            public int GetHashCode(Employee e)&lt;br /&gt;
            {&lt;br /&gt;
                return e.GetHashCode();&lt;br /&gt;
            }&lt;br /&gt;
            public int Compare(Employee lhs, Employee rhs)&lt;br /&gt;
            {&lt;br /&gt;
                return lhs.rupareTo(rhs, EmpCompareType);&lt;br /&gt;
            }&lt;br /&gt;
            public Employee.EmployeeComparer.ruparisonType&lt;br /&gt;
                EmpCompareType {get; set;}&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public class Tester&lt;br /&gt;
    {&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            List&amp;lt;Employee&amp;gt; empArray  = new List&amp;lt;Employee&amp;gt;();&lt;br /&gt;
            Random r = new Random();&lt;br /&gt;
            for (int i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
            {&lt;br /&gt;
                empArray.Add(new Employee(r.Next(10) + 100, r.Next(20)));&lt;br /&gt;
            }&lt;br /&gt;
            Employee.EmployeeComparer c = Employee.GetComparer();&lt;br /&gt;
            c.EmpCompareType = Employee.EmployeeComparer.ruparisonType.EmpID;&lt;br /&gt;
            empArray.Sort(c);&lt;br /&gt;
            for (int i = 0; i &amp;lt; empArray.Count; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(empArray[i].ToString());&lt;br /&gt;
            }&lt;br /&gt;
            c.EmpCompareType = Employee.EmployeeComparer.ruparisonType.Yrs;&lt;br /&gt;
            empArray.Sort(c);&lt;br /&gt;
            for (int i = 0; i &amp;lt; empArray.Count; i++)&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(empArray[i].ToString());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generic method for IComparable==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
class MyClass : IComparable { &lt;br /&gt;
  public int val; &lt;br /&gt;
 &lt;br /&gt;
  public MyClass(int x) { val = x; } &lt;br /&gt;
 &lt;br /&gt;
  // Implement IComparable. &lt;br /&gt;
  public int CompareTo(object obj) { &lt;br /&gt;
    return val - ((MyClass) obj).val; &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static bool isIn&amp;lt;T&amp;gt;(T what, T[] obs) where T : IComparable { &lt;br /&gt;
    foreach(T v in obs) &lt;br /&gt;
      if(v.rupareTo(what) == 0) // now OK, uses CompareTo() &lt;br /&gt;
        return true; &lt;br /&gt;
 &lt;br /&gt;
    return false; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    // Use isIn() with int. &lt;br /&gt;
    int[] nums = { 1, 2, 3, 4, 5 }; &lt;br /&gt;
 &lt;br /&gt;
    if(isIn(2, nums)) &lt;br /&gt;
      Console.WriteLine(&amp;quot;2 is found.&amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    // Use isIn() with string. &lt;br /&gt;
    string[] strs = { &amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;Three&amp;quot;}; &lt;br /&gt;
 &lt;br /&gt;
    if(isIn(&amp;quot;two&amp;quot;, strs)) &lt;br /&gt;
      Console.WriteLine(&amp;quot;two is found.&amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    // Use isIn with MyClass. &lt;br /&gt;
    MyClass[] mcs = { new MyClass(1), new MyClass(2), &lt;br /&gt;
                      new MyClass(3), new MyClass(4) }; &lt;br /&gt;
 &lt;br /&gt;
    if(isIn(new MyClass(3), mcs)) &lt;br /&gt;
      Console.WriteLine(&amp;quot;MyClass(3) is found.&amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    if(isIn(new MyClass(99), mcs)) &lt;br /&gt;
      Console.WriteLine(&amp;quot;This won&amp;quot;t display.&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;2 is found.&lt;br /&gt;
two is found.&lt;br /&gt;
MyClass(3) is found.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implement IComparable==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
using System.Collections; &lt;br /&gt;
 &lt;br /&gt;
// Implement the non-generic IComparable interface. &lt;br /&gt;
class Product : IComparable { &lt;br /&gt;
  string name; &lt;br /&gt;
  double cost; &lt;br /&gt;
  int onhand; &lt;br /&gt;
 &lt;br /&gt;
  public Product(string n, double c, int h) { &lt;br /&gt;
    name = n; &lt;br /&gt;
    cost = c; &lt;br /&gt;
    onhand = h; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public override string ToString() { &lt;br /&gt;
    return &lt;br /&gt;
      String.Format(&amp;quot;{0,-10}Cost: {1,6:C}  On hand: {2}&amp;quot;, &lt;br /&gt;
                    name, cost, onhand); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  // Implement the IComparable interface. &lt;br /&gt;
  public int CompareTo(object obj) { &lt;br /&gt;
    Product b; &lt;br /&gt;
    b = (Product) obj; &lt;br /&gt;
    return name.rupareTo(b.name); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    ArrayList inv = new ArrayList(); &lt;br /&gt;
     &lt;br /&gt;
    // Add elements to the list &lt;br /&gt;
    inv.Add(new Product(&amp;quot;A&amp;quot;, 5.5, 3)); &lt;br /&gt;
    inv.Add(new Product(&amp;quot;B&amp;quot;, 8.9, 2));    &lt;br /&gt;
    inv.Add(new Product(&amp;quot;C&amp;quot;, 3.0, 4)); &lt;br /&gt;
    inv.Add(new Product(&amp;quot;D&amp;quot;, 1.8, 8)); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;Product list before sorting:&amp;quot;); &lt;br /&gt;
    foreach(Product i in inv) { &lt;br /&gt;
      Console.WriteLine(&amp;quot;   &amp;quot; + i); &lt;br /&gt;
    } &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
 &lt;br /&gt;
    // Sort the list. &lt;br /&gt;
    inv.Sort(); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;Product list after sorting:&amp;quot;); &lt;br /&gt;
    foreach(Product i in inv) { &lt;br /&gt;
      Console.WriteLine(&amp;quot;   &amp;quot; + i); &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Product list before sorting:&lt;br /&gt;
   A         Cost:  $5.50  On hand: 3&lt;br /&gt;
   B         Cost:  $8.90  On hand: 2&lt;br /&gt;
   C         Cost:  $3.00  On hand: 4&lt;br /&gt;
   D         Cost:  $1.80  On hand: 8&lt;br /&gt;
Product list after sorting:&lt;br /&gt;
   A         Cost:  $5.50  On hand: 3&lt;br /&gt;
   B         Cost:  $8.90  On hand: 2&lt;br /&gt;
   C         Cost:  $3.00  On hand: 4&lt;br /&gt;
   D         Cost:  $1.80  On hand: 8&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>