第一题:
请用C#实现一个可以使用复合关键字访问的容器:
public interface Icontainer
{
object this[object key1,object key2]{get;set;}
void add(object key1,object key2)
void Remove(object key1,object key2)
bool contains(object key1,object key2)
}
public class MyContainer:Icontainer
{
//在此处写出实现的代码;
}
第二题:用c#实现可以按索引和关键字访问的容器
public interface Icontainer
{
object this[int index]{get;set;}
object this[object key]{get;set;}
object add(object key,object value)
void Remove(object key)
void Remove(object index)
bool contains(object key)
}
public class MyContainer:Icontainer
{
//在此处写出实现的代码;
}

解决方案 »

  1.   

    Good Good Study,Day Day Up!!
      

  2.   

    using System;namespace IndexExmaple
    {
    public class Employee
    {
    string name,empID;
    public Employee(string name,string empID)
    {
    this.name = name;
    this.empID = empID;
    }
    public string Name
    {
    get
    {
    return name;
    }
    set
    {
    this.name = value;
    }
    }
    public string EmpID
    {
    get
    {
    return empID;
    }
    set
    {
    this.empID = value;
    }
    }
    } public class Office
    {
    private Employee [] employees =new Employee[20];
    private int csr = 0;
    public Office(params Employee [] employeeList )
    {
    foreach(Employee i in employeeList)
    {
    employees[csr++] = i; 
    }
    }
    public Employee this[int index]
    {
    get
    {
    if(index<0 || index > employees.Length)
    {
    //error and do somthing
    }
    return employees[index];
    }
    set
    {
    if(index<0 || index > employees.Length)
    {
    //error and do somthing
    }
    else
    {
    employees[index] = value;
    if(csr < index)
    {
    csr = index;
    }
    }
    }
    } public Employee this[string index]
    {
    get
    {
    if(index.Length == 0)
    {
    //error
    }
    return this[getIndexFromName(index)];
    }
    set
    {
    this[getIndexFromName(index)] = value;
    }
    } private int getIndexFromName(string name)
    {
    for(int i= 0;i < employees.Length; i++)
    {
    if(employees[i]!=null && employees[i].Name == name)
    {
    return i;
    }
    }
    return -1;
    }

    public void Display()
    {
    foreach(Employee e in employees)
    {
    if(e!=null)
    {
    Console.WriteLine("{0}'s ID is:   {1}\n",e.Name,e.EmpID);
    }
    }
    } } public class Test
    {

    public static void Main()
    {
    Test test = new Test();
    test.Run();
    }
    public void Run()
    {
    Employee[] arrEmp = new Employee[3];
    arrEmp[0] =  new Employee("jonathan","20");
    arrEmp[1] =  new Employee("shenjane","30");
    arrEmp[2] =  new Employee("bob","40");
    Office office = new Office(arrEmp);
    office[10] = new Employee("tom","20");
    office.Display();
    }
    }
    }
      

  3.   

    第一题,不会
    第二题:这样可以么?
    using System;
    using System.Collections;public interface Icontainer
    {
    object this[int index]{get;set;}
    object this[object key]{get;set;}
    void add(object key,object value);
    void Remove(object key);
    void Remove(int index);
    bool contains(object key);
    }class MyContainer:Icontainer //最好实现了IEnumerable接口这样就可以根据key进行enum
    {
    private SortedList list = new SortedList();
    public int Length
    {
    get
    {
    return list.Count;
    }
    }
    public object this[int index]
    {
    get
    {
    return list.GetByIndex( index );
    }
    set
    {
    list.SetByIndex( index, value );
    }
    }
    public object this[object key]
    {
    get
    {
    return this[list.IndexOfKey( key )];
    }
    set
    {
    this[list.IndexOfKey( key )] = value;
    }
    }
    public void add(object key, object Value)
    {
    list.Add( key, Value );
    }
    public void Remove(object key)
    {
    list.Remove( key );
    }
    public void Remove( int index )
    {
    list.RemoveAt( index );
    }
    public bool contains(object key)
    {
    if( list.Contains(key) )
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    }public class a
    { public static void Main()
    {
    MyContainer con = new MyContainer();
    con.add( "1", "a" );
    con.add( "2", "b" );
    Console.ReadLine();
    printcon(con);
    Console.ReadLine();
    Console.Write( con["1"] );

    }
    private static void printcon( MyContainer con )
    {
    for( int i=0; i<con.Length; i++ )
    {
    Console.Write( con[i] + "\n" );
    }
    }


    }
      

  4.   

    第一個:
    public class MyContainer:Icontainer
    {
    Hashtable HashTbl;
    public MyContainer()
    {
    HashTbl = new Hashtable();
    }
    public object this[object key1,object key2]
    {
    get
    {
    if(contains(key1,key2))
    return null;
    Hashtable TmpHash;
    TmpHash = (Hashtable)HashTbl[key1];
    return TmpHash[key2];
    }
    set
    {
    if(!contains(key1,key2))
    return;
    Hashtable TmpHash;
    TmpHash = (Hashtable)HashTbl[key1];
    HashTbl.Remove(key1);
    TmpHash[key2] = value;
    HashTbl.Add(key1,TmpHash);
    }
    }
    public void add(object key1,object key2,object Value)
    {
    Hashtable TmpHash; if(contains(key1,key2))
    return;
    if(HashTbl.ContainsKey(key1))
    {
    TmpHash = (Hashtable)HashTbl[key1];
    HashTbl.Remove(key1);
    }
    else
    {
    TmpHash = new Hashtable();
    }
    TmpHash.Add(key2,Value);
    HashTbl.Add(key1,TmpHash);
    }
    public bool contains(object key1,object key2)
    {
    Hashtable TmpHash;
    if(HashTbl.ContainsKey(key1))
    {
    TmpHash = (Hashtable)HashTbl[key1];
    return TmpHash.ContainsKey(key2);
    }
    return false;
    }
    public void Remove(object key1,object key2)
    {
    if(contains(key1,key2))
    return;
    Hashtable TmpHash;
    TmpHash = (Hashtable)HashTbl[key1];
    HashTbl.Remove(key1);
    TmpHash.Remove(key2);
    HashTbl.Add(key1,TmpHash);
    }
    }
    第二個:
        可以如 guag(天知道)老兄所說的做,也可以用Hashtable和ArrayList組合起來做
      

  5.   

    最简单的,用双重Hashtable或HybridDictionary
    如果用一重也可以,将多个key合成一个对象即可。
    或者自己写搜索代码