unsort Hashtable

时间:2010-03-16 10:41:44

标签: c# hashtable

我正在用C#编写一个程序 我有这样的代码

Hashtable ht = new Hashtable();
            ht.Add("1", "One");
            ht.Add("2", "Two");
            ht.Add("3", "Three");
            ht.Add("4", "Four");

但编译器对它进行排序 我想知道如何防止排序哈希表 请帮帮我

8 个答案:

答案 0 :(得分:6)

HashTable不进行排序。它会根据哈希码重新排列项目,因此不会保留原始顺序。

如果您想保留原始订单,或想要指定排序顺序,则不能仅使用HashTable

要指定其他排序顺序,您可以使用SortedDictionary<T>。要保留原始订单,您可以将这些项目添加到Dictionary<T>List<T>

答案 1 :(得分:1)

编译器对它进行排序是什么意思?绝对没有排序。你是如何在项目上循环的?

我认为当你在键盘上循环时,物品的顺序无法保证 - &gt;

foreach(object key in hashtable.Keys){
...
}

但是根据您的问题,我认为您希望以与插入项目完全相同的顺序检索项目 - 也许最好的解决方案是保持密钥的并行列表;并从那里检索用于循环哈希表的密钥。

答案 2 :(得分:1)

改为使用Dictionary<int, string>Dictionary <string, string>

答案 3 :(得分:0)

做的时候:

        Hashtable ht = new Hashtable();
        ht.Add("1", "One");
        ht.Add("2", "Two");
        ht.Add("3", "Three");
        ht.Add("4", "Four");

        foreach (var k in ht.Keys)
        {
            Console.WriteLine(k);
        }

我看不到任何类型的排序。

答案 4 :(得分:0)

哈希表不保留插入项的顺序。它们存储在没有“正确”顺序概念的数据结构中。您应该假设哈希表中的项目将以随机顺序存储。

如果项目的顺序很重要,您应该使用List或其他结构而不是Hashtable。

答案 5 :(得分:0)

试试这个:

    Hashtable ht = new Hashtable();
    ht.Add("1", "One");
    ht.Add("2", "Two");
    ht.Add("3", "Three");
    ht.Add("4", "Four");

    foreach (var k in ht.Keys.sort)
    {
        Console.WriteLine(k);
    }

请注意sort

之后的ht.Keys

答案 6 :(得分:0)

要获取按键排序的散列表中的值(它看起来像你想要的那样),请使用:

public List<string> GetOrderedValues(HashTable ht)
{
    // Get a sorted list of keys
    List<string> keys = new List<string>(ht.Keys.Cast<string>());
    keys.Sort();

    // Get values sorted by key
    List<string> values = new List<string>();
    foreach (string key in keys)
        values.Add(ht[key]);

    // Return Sorted Values
    return values;
}

您还可以分割第一部分,然后您可以获得已排序键列表和已排序值列表。

另一个选项是返回一个KeyValuePair列表,它将按条目

排序

然后,为什么不删除所有的ashle并首先用KeyValuePair列表替换你的哈希表?

答案 7 :(得分:0)

我找到了这个博客http://mctexpert.blogspot.com/2014/12/keeping-hash-table-in-order.html

具体来说,使用[Ordered]将有助于保持原始排序:

$Hash = [Ordered]@{"Apple"="Red";

"Orange"="Orange";

"Banana"="Yellow";

"Pear"="Green";

"Blueberry"="Blue";

"Plum"="Purple"}