1

このようなリストと組み合わせてC#で辞書を使用したい

Dictionary<int, List<int>> Dir = new Dictionary<int, List<int>>();

しかし、キーと値を追加するための構文に問題があります。私はただのようなことをしたと思った

Dir.Add(integer1, integer2);

integer1 がキーで、integer2 が値として追加されます。次に、integer1 キーに追加したい場合は、次のようにします。

Dir.Add[interger1].Add(interger3);

もう 1 つ質問がありました。キーを表示するために、このような foreach ループがありました。

 foreach (KeyValuePair<int, List<int>> k in labelsList)
 {
     Console.WriteLine(k.Key + " "+ k.Value);
 }

7 まで期待したキーが表示されますが、表示したい値が表示されず、表示されるだけです

1 System.Collections.Generic.List`1[System.Int32]

2 System.Collections.Generic.List`1[System.Int32]

3 System.Collections.Generic.List`1[System.Int32]

4 System.Collections.Generic.List`1[System.Int32]

5 System.Collections.Generic.List`1[System.Int32]

6 System.Collections.Generic.List`1[System.Int32]

7 System.Collections.Generic.List`1[System.Int32]

次のようなネストされた foreach を使用する考えがあります

foreach (KeyValuePair<int, List<int>> k in labelsList)
{
     foreach (KeyValuePair<int, List<int>> k in labelsList)
     {
         Console.WriteLine(k.Key + " " + k.Value);
     }
}

しかし、ネストされた foreach の中に何を入れてリストを反復処理すればよいかわかりません

4

5 に答える 5

2

コレクションに値を追加する前に、コレクションをディクショナリに追加する必要があります。これは、1回のルックアップを行うソリューションですContainsKey(使用されている場合は2回と比較して)。また、リストが欠落している場合は追加します。

public class YourClass
{
    private Dictionary<int, List<int>> _dictionary = new Dictionary<int, List<int>>();

    public void AddItem(int key, int value)
    {
        List<int> values;
        if (!_dictionary.TryGetValue(key, out values))
        {
            values = new List<int>();
            _dictionary.Add(key, values);
        }

        values.Add(value);
    }

    public IEnumerable<int> GetValues(int key)
    {
        List<int> values;
        if (!_dictionary.TryGetValue(key, out values))
        {
            return new int[0];
        }

        return values;
    }
}
于 2013-07-03T15:42:23.347 に答える
1

を呼び出すときは、オブジェクトへの参照Dir.Add()を提供する必要があります。自体を提供することは正しくありません。したがって、次のようなものが必要です。List<int> int

Dir.Add(integer1, new List<int>());

次に、次のようにそのエントリを更新できます。

Dir[integer1].Add(integer2);
Dir[integer1].Add(integer3);

または、コレクション初期化構文を使用できます。

Dir.Add(integer1, new List<int> { integer2, integer3});
于 2013-07-03T15:43:38.717 に答える
0

アイテムを追加したい場合は、このコードを使用してください

(一方dicはあなたですDictionary<Int32, List<Int32>>

if (dic.ContainsKey(yourKey))
{
   dic[yourKey].Add(yourInt);
} else {
   dic[yourKey] = new List<int> { yourInt };
}
于 2013-07-03T16:06:37.673 に答える
0

まず、 key のエントリを作成しますinteger1(まだ行っていない場合)。

Dir.Add(integer1, new List<int>());

次に、適切な辞書エントリを見つけて、その値 (この場合はリスト) に追加します。

Dir[integer1].Add(integer2);

それがあなたが探しているものであれば、他の回答でより多くのコードスニペットを見つけることができます。

于 2013-07-03T15:39:43.417 に答える
0

List<int>as 値を追加する必要があります。次のように動作します。

if (!Dir.ContainsKey(integer1)) {
  Dir.Add(integer1, new List<int>());
}

var list = Dir[integer1];
list.Add(integer2);
于 2013-07-03T15:43:52.117 に答える