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]のようなものにする必要があります。何か正しいですか?しかし、これはうまくいきませんでした。私は何を取りこぼしたか?

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

ハッシュテーブルは、セットを表すデータ構造です。つまり、定義上、要素を取得するためにハッシュテーブルにアクセスするのではなく、要素が存在する場合は追加、削除、またはaksするだけです。これらは、セットを使用した基本的な操作です。

HashSet<T>はいえ、.NETにはインデクサーがありません。なんで?自分で書いた行を考えてみましょう。

var item = gen.h_lh[lh]

本当にlhtoインデックスを提供できる場合、ハッシュテーブルから何が得られると思いますか?同じインスタンス?もちろん、インデクサーで使用している場合は、すでに持っています。したがって、おそらくあなたの問題はあまりよく決定されていません。

まず最初に、要素にアクセスする理由(および方法)を決定する必要があります。必要なのは、それらすべてを反復処理することです。それとも、それらのいずれかをすばやくインデックスに登録したいですか?ある時点ですべての要素を取得したいだけの場合は、必要なものがすべて揃っています。HashSet<T>実装しIEnumerable<T>ます。特定の要素を取得する必要がある場合は、要素を識別するためのキーnameが必要です(ここのプロパティなど)。この場合、@ Tergiverが言ったように、必要なのはではHashSet<lh>なく、です。Dictionary<string,lh>

于 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 に答える