Sorting and Searching:Advanced Use of Hashes : Compare « Collections Data Structure « C# / C Sharp






Sorting and Searching:Advanced Use of Hashes

Sorting and Searching:Advanced Use of Hashes

using System;
using System.Collections;

public class AdvancedUseofHashes
{
    public static void Main()
    {
        Employee herb = new Employee("H", 5);
        Employee george = new Employee("G", 1);
        Employee frank = new Employee("F", 2);
        Hashtable employees = 
        new Hashtable(Employee.HashByName, Employee.SortByName);
        employees.Add(herb, "AA");
        employees.Add(george, "BB");
        employees.Add(frank, "CC");
        Employee herbClone = new Employee("H", 000);
        string address =(string) employees[herbClone];
        Console.WriteLine("{0} lives at {1}", herbClone, address);
    }
}

public class Employee: IComparable
{
    public Employee(string name, int id)
    {
        this.name = name;
        this.id = id;
    }
    
    int IComparable.CompareTo(object obj)
    {
        Employee emp2 = (Employee) obj;
        if (this.id > emp2.id)
        return(1);
        if (this.id < emp2.id)
        return(-1);
        else
        return(0);
    }
    public override int GetHashCode()
    {
        return(id);
    }
    public static IComparer SortByName
    {
        get
        {
            return((IComparer) new SortByNameClass());
        }
    }
    
    public static IComparer SortById
    {
        get
        {
            return((IComparer) new SortByIdClass());
        }
    }
    public static IHashCodeProvider HashByName
    {
        get
        {
            return((IHashCodeProvider) new HashByNameClass());
        }
    }
    public override string ToString()
    {
        return(name + ":" + id);
    }
    
    class SortByNameClass: IComparer
    {
        public int Compare(object obj1, object obj2)
        {
            Employee emp1 = (Employee) obj1;
            Employee emp2 = (Employee) obj2;
            
            return(String.Compare(emp1.name, emp2.name));
        }
    }
    
    class SortByIdClass: IComparer
    {
        public int Compare(object obj1, object obj2)
        {
            Employee emp1 = (Employee) obj1;
            Employee emp2 = (Employee) obj2;
            
            return(((IComparable) emp1).CompareTo(obj2));
        }
    }
    class HashByNameClass: IHashCodeProvider
    {
        public int GetHashCode(object obj)
        {
            Employee emp = (Employee) obj;
            return(emp.name.GetHashCode());
        }
    }
    
    string    name;
    int    id;
}

           
       








Related examples in the same category

1.implements the IComparable interfaceimplements the IComparable interface
2.Use IComparerUse IComparer
3.Implement IComparableImplement IComparable
4.Sorting and Searching:Using IComparerSorting and Searching:Using IComparer
5.Sorting and Searching:Implementing IComparableSorting and Searching:Implementing IComparable
6.Sorting and Searching:IComparer as a PropertySorting and Searching:IComparer as a Property