C#哈希对象表

时间:2012-05-25 21:06:08

标签: c# list class hashtable

我有哈希表中的对象,在该对象中我有一个列表,如何访问它?

ls.cs


         class lh 
                {
                    public string name;
                    public  List<ulong> nList = new List<ulong>(); 

                    public lh(string name)
                    {
                        this.name = name; ;
                    }
                }

    Program.cs

    static void Main(string[] args)
    {

    while((line=ps.ReadLine()) != null) 
    { 
        gen.h_lh.Add(line, new lh(line));
    }
    }    
    public class gen
        {
          public static Hashtable h_lh = new Hashtable();
        }
这是有效的。当我调试时,我可以看到在哈希表中创建的对象;我只是不知道如何访问/存储列表的值 它必须像gen.h_lh [lh]。某事对吗?但这没用。我错过了什么?

3 个答案:

答案 0 :(得分:1)

首先Hashtable已过时,请改用Dictionary<TKey, TValue>Dictionary<string, lh>)。

根据密钥,您可以使用以下代码访问该密钥的值:h_lh[key]

或者您可以使用以下命令枚举所有键/值对:

foreach (KeyValuePair<string, lh> pair in h_lh)
    pair.Value // this is an lh object

您还可以只列举键h_lh.Keys,或仅列举h_lh.Values值。

答案 1 :(得分:0)

foreach(System.System.Collections.DictionaryEntry entry in h_lh) 
{
    Console.WriteLine("Key: " + entry.Key.ToString() + " | " + "Value: " + entry.Value.ToString());  
}

或者您可以使用密钥

访问它
lh myLh = h_lh[line];

更新评论的答案

foreach(System.System.Collections.DictionaryEntry entry in h_lh) 
{
    List<ulong> nList = (ulong)entry.Value; 
    nList.Add(1); 
}

答案 2 :(得分:0)

哈希表是表示集合的数据结构。这意味着,根据定义,您不希望访问哈希表来获取元素,只是想要添加,删除或响应元素是否存在。这些是使用集合的基本操作。

这就是说,.NET中的HashSet<T>没有索引器。为什么?考虑一下你自己写的那一行:

var item = gen.h_lh[lh]

如果你真的可以提供lh索引,你期望哈希表给你什么?同样的例子?当然不是,如果你在索引器中使用它,你已经拥有它了。所以也许你的问题不太确定。

首先,您需要确定要访问元素的原因(以及如何)。你想要的只是迭代所有这些,或者你想快速索引它们中的任何一个?如果您只想在某个时刻获得所有元素,那么您就拥有了所需的一切:HashSet<T>实现了IEnumerable<T>。如果你需要获得一个特定的元素,那么你必须有一些 key 来识别元素(比如这里的name属性),在这种情况下你想要的不是{{ 1}}但是HashSet<lh>,就像@Tergiver说的那样。