c#按键排序的哈希表
本文关键字:哈希表 排序 | 更新日期: 2023-09-27 18:24:48
我有一个哈希表,其中键用字母表示,值用数字表示。如何根据关键字对哈希表进行排序?
ExchangeA, 200
ExchangeV, 100
ExchangeC, 200
像这个
ExchangeA, 200
ExchangeC, 200
ExchangeV, 100
您可以为此使用SortedDictionary
,它将为您按键排序。在您的情况下,SortedDictionary<string, int>
会起作用:
SortedDictionary<string, int> dict = new SortedDictionary<string, int>();
dict.Add("Exchange C", 200);
dict.Add("Exchange A", 200);
dict.Add("Exchange V", 100);
foreach (var kvp in dict)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
输出:
Key = Exchange A, Value = 200
Key = Exchange C, Value = 200
Key = Exchange V, Value = 100
我发现对哈希表进行"排序"的最简单方法是:
var hash = new Hashtable();
var orderedKeys = hash.Keys.Cast<string>().OrderBy(c => c); // supposing you're using string keys
var allKvp = from x in orderedKeys select new{ key = x, value = hash[x] };
然而,我并没有对原始哈希表进行排序,只是以有序的方式读取其值。
与其他回复一样,如果您需要按排序方式存储数据,最好使用SortedDictionary
由于哈希表的性质,您无法根据密钥对其进行排序:它们根据哈希代码将密钥组织在存储桶中,哈希代码是哈希表无法控制的值。但是,您可以按照自己喜欢的顺序读取键值对。以下是使用LINQ:的方法
IDictionary<string, int> d = ...; // your hash table
var ordered = d.OrderBy(p => p.Key).ToList();
foreach (var p in ordered) {
Console.WriteLine("Key: {0} Value: {1}", p.Key, p.Value);
}
使用Linq很容易(using System.Linq
):
var sortedList = (from kv in MyDictionary select kv order by kv.Key).ToList<KeyValuePair<string, int>>();
返回KeyValuePair<string, int>
的列表。
使用列表而不是哈希(或将哈希转换为字典),并执行以下操作:
var dictionary = new Dictionary<string, int>();
var l = dictionary.Keys.ToList();
l.Sort();
foreach (var key in l)
{
Console.WriteLine(dictionary[key]);
}
我使用了一个列表来存储Hashtable的键,并对其进行了排序,然后使用这个排序列表来分离Hashtable。这是我的代码:
List<string> lst = new List<string>(); foreach (var key2 in ht.Keys) { lst.Add(key2.ToString()); } lst.Sort(); foreach (var item in lst) { Console.WriteLine(string.Format("{0},{1}", item, ht[item.ToString()])); }