c#Hashtable按键排序

时间:2012-02-14 16:00:15

标签: c# sorting hashtable jquery-ui-sortable

我有一个哈希表,其中键为字母,值为数字。 如何根据键对哈希表进行排序?

ExchangeA, 200
ExchangeV, 100
ExchangeC, 200

就像这样

ExchangeA, 200
ExchangeC, 200
ExchangeV, 100

6 个答案:

答案 0 :(得分:13)

您可以使用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

答案 1 :(得分:5)

我发现“排序”哈希表的最简单方法是:

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

答案 2 :(得分:2)

由于哈希表的性质,您无法对密钥进行排序:它们根据哈希代码(哈希表控件之外的值)在桶中组织密钥。但是,您可以按照您喜欢的顺序读取键值对。以下是使用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);
}

答案 3 :(得分:0)

使用列表而不是哈希(或将哈希值转换为字典),并执行以下操作:

var dictionary = new Dictionary<string, int>();
var l = dictionary.Keys.ToList();
l.Sort();
foreach (var key in l)
{
    Console.WriteLine(dictionary[key]);
}

答案 4 :(得分:0)

使用Linq很简单(using System.Linq):

var sortedList = (from kv in MyDictionary select kv order by kv.Key).ToList<KeyValuePair<string, int>>();

返回KeyValuePair<string, int>

的列表

答案 5 :(得分:0)

我使用了一个列表来存储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()]));
        }