0

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

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].something 的东西吗?但这没有用。我错过了什么?

4

3 回答 3

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

于 2012-05-25T21:20:41.783 回答
0

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

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

var item = gen.h_lh[lh]

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

首先,您需要确定为什么(以及如何)要访问这些元素。您想要的只是遍历所有这些,或者您想快速索引其中任何一个?如果您只想在某个时候获取所有元素,那么您拥有所需的一切:HashSet<T>implements IEnumerable<T>。如果您需要获取特定元素,那么您必须有一些密钥来识别该元素(例如name这里的属性),在这种情况下,您想要的不是 aHashSet<lh>而是 a Dictionary<string,lh>,就像@Tergiver 说的那样。

于 2012-05-25T21:23:30.477 回答
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); 
}
于 2012-05-25T21:15:53.973 回答