<?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%2FIComparer</id>
		<title>Csharp/CSharp Tutorial/Data Structure/IComparer - История изменений</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%2FIComparer"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparer&amp;action=history"/>
		<updated>2026-04-29T23:12:17Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Data_Structure/IComparer&amp;diff=5519&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/IComparer&amp;diff=5519&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/IComparer&amp;diff=5520&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/IComparer&amp;diff=5520&amp;oldid=prev"/>
				<updated>2010-05-26T12:15:48Z</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;==Class with IComparable and IComparer==&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;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static int Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    Employee[] empList = new Employee[5];&lt;br /&gt;
    empList[0] = new Employee(123, &amp;quot;R&amp;quot;);&lt;br /&gt;
    empList[1] = new Employee(6, &amp;quot;M&amp;quot;);&lt;br /&gt;
    empList[2] = new Employee(6, &amp;quot;V&amp;quot;);&lt;br /&gt;
    empList[3] = new Employee(13, &amp;quot;N&amp;quot;);&lt;br /&gt;
    empList[4] = new Employee(6, &amp;quot;C&amp;quot;);&lt;br /&gt;
    if(empList[0] &amp;lt; empList[4])&lt;br /&gt;
      Console.WriteLine(&amp;quot;empList[0] &amp;lt; empList[4]&amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
      Console.WriteLine(&amp;quot;empList[0] &amp;gt;= empList[4]&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Employee : IComparable&lt;br /&gt;
{&lt;br /&gt;
  private class SortByEmployeemNameHelper : IComparer&lt;br /&gt;
  {&lt;br /&gt;
    public SortByEmployeemNameHelper(){}&lt;br /&gt;
    int IComparer.rupare(object o1, object o2)&lt;br /&gt;
    {&lt;br /&gt;
      Employee t1 = (Employee)o1;&lt;br /&gt;
      Employee t2 = (Employee)o2;&lt;br /&gt;
      return String.rupare(t1.EmployeemName, t2.EmployeemName);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private int EmployeeID;&lt;br /&gt;
  private string petName;&lt;br /&gt;
  // properties.&lt;br /&gt;
  public int ID&lt;br /&gt;
  {&lt;br /&gt;
    get{return EmployeeID;}&lt;br /&gt;
    set{EmployeeID = value;}&lt;br /&gt;
  }&lt;br /&gt;
  public string EmployeemName&lt;br /&gt;
  {&lt;br /&gt;
    get{return petName;}&lt;br /&gt;
    set{petName = value;}&lt;br /&gt;
  }&lt;br /&gt;
  // Constructor set.&lt;br /&gt;
  public Employee(){}&lt;br /&gt;
  public Employee(int id, string name){ &lt;br /&gt;
      this.EmployeeID = id; &lt;br /&gt;
      this.petName = name;&lt;br /&gt;
  }&lt;br /&gt;
  // IComparable implementation.&lt;br /&gt;
  int IComparable.rupareTo(object o)&lt;br /&gt;
  {&lt;br /&gt;
    Employee temp = (Employee)o;&lt;br /&gt;
    if(this.EmployeeID &amp;gt; temp.EmployeeID)&lt;br /&gt;
      return 1;&lt;br /&gt;
    if(this.EmployeeID &amp;lt; temp.EmployeeID)&lt;br /&gt;
      return -1;&lt;br /&gt;
    else&lt;br /&gt;
      return 0;&lt;br /&gt;
  }&lt;br /&gt;
  // Property to return the SortByEmployeemName comparer.&lt;br /&gt;
  public static IComparer SortByEmployeemName{ &lt;br /&gt;
      get { return (IComparer)new SortByEmployeemNameHelper(); } &lt;br /&gt;
  }&lt;br /&gt;
  public static bool operator &amp;lt; (Employee c1, Employee c2)&lt;br /&gt;
  {&lt;br /&gt;
    IComparable itfComp = (IComparable)c1;&lt;br /&gt;
    return (itfComp.rupareTo(c2) &amp;lt; 0);&lt;br /&gt;
  }&lt;br /&gt;
  public static bool operator &amp;gt; (Employee c1, Employee c2)&lt;br /&gt;
  {&lt;br /&gt;
    IComparable itfComp = (IComparable)c1;&lt;br /&gt;
    return (itfComp.rupareTo(c2) &amp;gt; 0);&lt;br /&gt;
  }&lt;br /&gt;
  public static bool operator &amp;lt;= (Employee c1, Employee c2)&lt;br /&gt;
  {&lt;br /&gt;
    IComparable itfComp = (IComparable)c1;&lt;br /&gt;
    return (itfComp.rupareTo(c2) &amp;lt;= 0);&lt;br /&gt;
  }&lt;br /&gt;
  public static bool operator &amp;gt;= (Employee c1, Employee c2)&lt;br /&gt;
  {&lt;br /&gt;
    IComparable itfComp = (IComparable)c1;&lt;br /&gt;
    return (itfComp.rupareTo(c2) &amp;gt;= 0);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;empList[0] &amp;gt;= empList[4]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==IComparer as a Property==&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;
public class Employee: IComparable&lt;br /&gt;
{&lt;br /&gt;
    public Employee(string name, int id)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        this.id = id;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int IComparable.rupareTo(object obj)&lt;br /&gt;
    {&lt;br /&gt;
        Employee emp2 = (Employee) obj;&lt;br /&gt;
        if (this.id &amp;gt; emp2.id)&lt;br /&gt;
            return(1);&lt;br /&gt;
        if (this.id &amp;lt; emp2.id)&lt;br /&gt;
            return(-1);&lt;br /&gt;
        else&lt;br /&gt;
            return(0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static IComparer SortByName&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return((IComparer) new SortByNameClass());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static IComparer SortById&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return((IComparer) new SortByIdClass());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public override string ToString()&lt;br /&gt;
    {&lt;br /&gt;
        return(name + &amp;quot;:&amp;quot; + id);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    class SortByNameClass: IComparer&lt;br /&gt;
    {&lt;br /&gt;
        public int Compare(object obj1, object obj2)&lt;br /&gt;
        {&lt;br /&gt;
            Employee emp1 = (Employee) obj1;&lt;br /&gt;
            Employee emp2 = (Employee) obj2;&lt;br /&gt;
            &lt;br /&gt;
            return(String.rupare(emp1.name, emp2.name));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    class SortByIdClass: IComparer&lt;br /&gt;
    {&lt;br /&gt;
        public int Compare(object obj1, object obj2)&lt;br /&gt;
        {&lt;br /&gt;
            Employee emp1 = (Employee) obj1;&lt;br /&gt;
            Employee emp2 = (Employee) obj2;&lt;br /&gt;
            &lt;br /&gt;
            return(((IComparable) emp1).rupareTo(obj2));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    string name;&lt;br /&gt;
    int id;&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Employee[] arr = new Employee[4];&lt;br /&gt;
        arr[0] = new Employee(&amp;quot;A&amp;quot;, 1);&lt;br /&gt;
        arr[1] = new Employee(&amp;quot;B&amp;quot;, 2);&lt;br /&gt;
        arr[2] = new Employee(&amp;quot;C&amp;quot;, 4);&lt;br /&gt;
        arr[3] = new Employee(&amp;quot;D&amp;quot;, 3);&lt;br /&gt;
        &lt;br /&gt;
        Array.Sort(arr, Employee.SortByName);&lt;br /&gt;
        &lt;br /&gt;
        Console.WriteLine(&amp;quot;employees is now sorted by name&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        foreach (Employee emp in arr)&lt;br /&gt;
           Console.WriteLine(&amp;quot;Employee: {0}&amp;quot;, emp);&lt;br /&gt;
        &lt;br /&gt;
        Array.Sort(arr, Employee.SortById);&lt;br /&gt;
        &lt;br /&gt;
        Console.WriteLine(&amp;quot;employees is now sorted by id&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        foreach (Employee emp in arr)&lt;br /&gt;
           Console.WriteLine(&amp;quot;Employee: {0}&amp;quot;, emp);&lt;br /&gt;
        &lt;br /&gt;
        ArrayList arrList = new ArrayList();&lt;br /&gt;
        arrList.Add(arr[0]);&lt;br /&gt;
        arrList.Add(arr[1]);&lt;br /&gt;
        arrList.Add(arr[2]);&lt;br /&gt;
        arrList.Add(arr[3]);&lt;br /&gt;
        arrList.Sort(Employee.SortByName);&lt;br /&gt;
        &lt;br /&gt;
        foreach (Employee emp in arrList)&lt;br /&gt;
            Console.WriteLine(&amp;quot;Employee: {0}&amp;quot;, emp);&lt;br /&gt;
        &lt;br /&gt;
        arrList.Sort();    // default is by id&lt;br /&gt;
        &lt;br /&gt;
        foreach (Employee emp in arrList)&lt;br /&gt;
            Console.WriteLine(&amp;quot;Employee: {0}&amp;quot;, emp);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;employees is now sorted by name&lt;br /&gt;
Employee: A:1&lt;br /&gt;
Employee: B:2&lt;br /&gt;
Employee: C:4&lt;br /&gt;
Employee: D:3&lt;br /&gt;
employees is now sorted by id&lt;br /&gt;
Employee: A:1&lt;br /&gt;
Employee: B:2&lt;br /&gt;
Employee: D:3&lt;br /&gt;
Employee: C:4&lt;br /&gt;
Employee: A:1&lt;br /&gt;
Employee: B:2&lt;br /&gt;
Employee: C:4&lt;br /&gt;
Employee: D:3&lt;br /&gt;
Employee: A:1&lt;br /&gt;
Employee: B:2&lt;br /&gt;
Employee: D:3&lt;br /&gt;
Employee: C:4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use IComparer==&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;
// Create an IComparer for Product objects. &lt;br /&gt;
class ProductComparer : IComparer { &lt;br /&gt;
  // Implement the IComparable interface. &lt;br /&gt;
  public int Compare(object obj1, object obj2) { &lt;br /&gt;
    Product a, b; &lt;br /&gt;
    a = (Product) obj1; &lt;br /&gt;
    b = (Product) obj2; &lt;br /&gt;
    return a.name.rupareTo(b.name); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Product { &lt;br /&gt;
  public 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;
 &lt;br /&gt;
class IComparerDemo { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    ProductComparer comp = new ProductComparer(); &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 using an IComparer. &lt;br /&gt;
    inv.Sort(comp); &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>