澳门赌场

法式开辟 > C# > 注释

Hashtable排序的几种方式(C#)

亮术网 2019-07-07 本网首创

Hashtable 利于用键值疾速查找,却不供给排序的方式,以是它的排序须要借住数组或别的调集来完成。在会商详细方式之前,先申明 Hashtable 地点的定名空间和新建一个 Hashtable 且增加一些值。

Hashtable地点的定名空间为:System.Collections,以是别忘了先 using System.Collections;;新建一个 Hashtable,且增加三个值,详细以下:

Hashtable ht = new Hashtable();

ht.Add("a", 5);
  ht.Add("b", 22);
  ht.Add("c", 16);

 

1、利用 ArrayList 数组排序

ArrayList al = new ArrayList(ht.Keys);
  al.Sort();

 

1)按键升序输入

for(int i = 0; i < al.Count; i++)
    Response.Write("键:" + al[i] + " 的值为:" + ht[al[i]].ToString() + "<br />");

 

输入成果:

键:a 的值为:5

键:b 的值为:22

键:c 的值为:16

 

2)按键降序输入

for(int i = al.Count - 1; i >= 0; i--)
    Response.Write("键:" + al[i] + " 的值为:" + ht[al[i]].ToStrings() + "<br />");

 

输入成果:

键:c 的值为:16

键:b 的值为:22

键:a 的值为:5

 

2、利用 Array 数组按值排序

string[] arrKey = new string[ht.Count];//暂存 Hashtable 的键
  int[] arrValue = new int[ht.Count];//暂存 Hashtable 的值

ht.Keys.CopyTo(arrKey, 0);
  ht.Values.CopyTo(arrValue, 0);

Array.Sort(arrValue, arrKey);//按 HashTable 的值排序
  for(int i = 0; i < arrKey.Length; i++)
    Response.Write("键:" + arrKey[i].ToString() + " 的值为:" + arrValue[i].ToString() + "<br />");

 

输入成果:

键:a 的值为:5

键:c 的值为:16

键:b 的值为:22

 

3、利用 DataTable 按键或值排序

DataTable dt = new DataTable();
  dt.Columns.Add("htKey", typeof(string));
  dt.Columns.Add("htValue", typeof(int));

IDictionaryEnumerator ide = ht.GetEnumerator();
  while (ide.MoveNext())
  {
    DataRow dr = dt.NewRow();
    dr["htKey"] = ide.Key.ToString();
    dr["htValue"] = ide.Value.ToString();
    dt.Rows.Add(dr);
  }

DataView dv = dt.DefaultView;
  dv.Sort = "htValue Desc";//此处是按值降序摆列
  DataTable dt1 = dv.ToTable();

for (int i = 0; i < dt1.Rows.Count; i++)
    Response.Write("键:" + dt1.Rows[i]["htKey"].ToString() + " 的值为:" + dt1.Rows[i]["htValue"].ToString() + "<br/>");

 

 输入成果:

键:b 的值为:22

键:c 的值为:16

键:a 的值为:5