从哈希表中获取特定密钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从哈希表中获取特定密钥相关的知识,希望对你有一定的参考价值。

所以我有这个Hashtable

Hashtable Months = new Hashtable();
Months.Add(0, "JANUARY");
Months.Add(1, "FEBRUARY");
Months.Add(2, "MARCH");
Months.Add(3, "APRIL");
Months.Add(4, "MAY");
Months.Add(5, "JUNE");
Months.Add(6, "JULY");
Months.Add(7, "AUGUST");
Months.Add(8, "SEPTEMBER");
Months.Add(9, "OCTOBER");
Months.Add(10, "NOVEMBER");
Months.Add(11, "DECEMBER");

我希望用户输入一个月,例如“May”,能够从我的程序中的数组中检索索引[4]。

string Month = Console.ReadLine();

基本上从输入的相应月份的数量中检索索引。

答案

试试这个

var key = Months.Keys.Cast<int>().FirstOrDefault(v => Months[v] == "MAY");

注意:不要忘记包含此命名空间 - using System.Linq;

另一答案

Hashtable格式从DictionaryEntry获取元素

foreach (DictionaryEntry e in Months)
{
    if ((string)e.Value == "MAY")
    {
        //get the "index" with e.Key
    }
}
另一答案

您只需使用循环即可执行它;

    public List<string> FindKeys(string value, Hashtable hashTable)
    {
        var keyList = new List<string>();
        IDictionaryEnumerator e = hashTable.GetEnumerator();
        while (e.MoveNext())
        {
            if (e.Value.ToString().Equals(value))
            {
                keyList.Add(e.Key.ToString());
            }
        }
        return keyList;
    }

用法;

var items = FindKeys("MAY",Months);
另一答案

如果你想从月份名称中查找索引,那么Dictionary<string, int>会更合适。我交换参数的原因是,如果你只想查找索引,而不是反过来,这将更快。

你应该将字典声明为不区分大小写,以便它检测例如mayMaymAyMAY同样的事情:

Dictionary<string, int> Months = new Dictionary<string, int>(StringComparison.OrdinalIgnoreCase);

然后只要你想获得月份索引就使用它的TryGetValue() method

int MonthIndex = 0;
if(Months.TryGetValue(Month, out MonthIndex)) {
    //Month was correct, continue your code...
else {
    Console.WriteLine("Invalid month!");
}

以上是关于从哈希表中获取特定密钥的主要内容,如果未能解决你的问题,请参考以下文章

从链式哈希表中有效地挑选一个随机元素?

从 URL 获取片段(哈希“#”后的值)[关闭]

如何从 URL 获取片段标识符(哈希 # 后的值)?

如何使用 glib 处理哈希表中的冲突

从 2 个不同片段的 sqlite 中的 2 个表中获取信息

从哈希数组中收集特定值