Hashtable按位置检索值?

时间:2014-02-06 11:57:03

标签: c#

public static Hashtable Drinks = new Hashtable();
Drinks["Water"] = 3;
Drinks["Coffee"] = 2
Drinks["Beer"] = 5;

获取我使用的项目的值: int drink =(int)饮料[“水”]; 有效。

我想知道我是如何做到这一点的。 pCardValue1 =(int)card [1];

而不是键入项目名称,我希望按位置获取值。

4 个答案:

答案 0 :(得分:3)

Hashtable(和Dictionary)类没有被排序,这意味着它的条目没有任何顺序或位置,即使您获得了一个键列表,该顺序也是随机的。如果您想按键和位置获取值,则应使用OrderedDictionary集合。

答案 1 :(得分:3)

您需要OrderedDictionaryHashTable未订购。

另请注意,HashTable不应在框架2.0的生产代码中使用,Dictionary<TKey,TValue>命名空间中有System.Collections.Generic个类,它可替代HashTable并提供泛型。

答案 2 :(得分:2)

如前所述,您应该使用OrderedDictionary。由于您在评论中要求提供示例,因此这里有一个:

var stringKey = "stringKey";
            var stringValue = "stringValue";

            var objectKey = "dateTimeKey";
            var objectValue = DateTime.Now;

            var dict = new OrderedDictionary();
            dict.Add(stringKey, stringValue);
            dict.Add(objectKey, objectValue);

            for (int i = 0; i < dict.Count; i++)
            {
                var value = dict[i];
            }

多次枚举字典将以相同的顺序返回结果。请注意,因为它接受键和值的对象,所以可以根据需要混合使用不同的类型,这意味着在使用结构时必须小心。

答案 3 :(得分:0)

你可以使用linq技巧获取位置的项目名称。

int position = 1;
var a1 = (from DictionaryEntry entry in Drinks select entry.Key).Skip(position).FirstOrDefault();

如果您想按项目名称输入值,请使用

object value = 2;
var a = (from DictionaryEntry entry in Drinks where entry.Value.Equals(value) select entry.Key).FirstOrDefault();