添加了5个键-值对(其中有值相同的对象)到哈希表中,对哈希表按照值来排序,怎么取出排序后的值对应的键?
例如:
Hashtable ht=new Hashtable(); //创建一个Hashtable实例
ht.Add("1","1");//添加key/value键值对
ht.Add("2","2");//
ht.Add("3","5");//
ht.Add("4","5");//
ht.Add("5","5");//
ICollection values = ht.Values;//对值排序
ArrayList al = new ArrayList(values);
al.Sort();//从小到大
al.Reverse();//反转,从大到小
//取值由大到小对应的键
for (int i = 0; i < 5; i++)
  {
  foreach (System.Collections.DictionaryEntry de in ht)
  if (de.Value.ToString() == maxsimi[i].ToString())
  {
  maxunum[i] = Convert.ToInt16(de.Key.ToString());//得到key
  break;//退出foreach遍历
  }
  Console.WriteLine("{0}", maxunum[i]);
  }输出最大的值对应的键,为5 5 5 2 1  怎样将值相同的键识别出来呢?

解决方案 »

  1.   

    没办法我觉得你应该用 List<T>
      

  2.   

    使用hashtable的目的是我要保存键和值,两者要对应起来 List<T>有这个性质么
    ? 感谢
      

  3.   

    static void Main(string[] args)
    {
        var list = new List<SomeObj> 
                       {
                          new SomeObj { key="1", value="1" },
                          new SomeObj { key="2", value="2" },
                          new SomeObj { key="3", value="5" },
                          new SomeObj { key="4", value="5" },
                          new SomeObj { key="5", value="5" },
                       };
        //按value降序
        list = list.OrderByDescending(t => t.value).ToList();
        foreach (var item in list)
            Console.WriteLine(item);    Console.WriteLine("------------");    //按key升序
        list = list.OrderBy(t => t.key).ToList();
        foreach (var item in list)
            Console.WriteLine(item);    Console.Read();
    }public class SomeObj
    {
        public string key { get; set; }
        public string value { get; set; }
        public override string ToString()
        {
            return key + ":" + value;
        }
    }