2016-10-15 5 views
0

タプルのリストを持つ辞書に値を追加しようとしていますが、キーは同じです。Cでタプルのリストに異なる値を追加する方法

私はこの

public struct MyStruct { public List> list1; } 
public static Dictionary<long, MyStruct> myDictionary = new 
               Dictionary<long, MyStruct>(); 
funct() 
{ 
    if (myDictionary.ContainsKey(key)) 
    { 
     myDictionary[key]= new MyStruct { list1 = s.list1 }; 
    } // this block is been called from another function 
} 

のようにやっているしかし、私は新しいキーワードに来て値が上書きを取得するたびに使用していて。私は別の方法を得ていないと私は追加したいです。別の方法を示唆してください。私は網を徹底的に調査しましたが、誰も私の問題を解決しませんでした。

+0

キーごとに1つの値しか指定できません。複数ある場合はリストまたは他のコンテナとして値を設定する必要があります –

+0

辞書メイトの複数の同じキーを持つことはできません – inan

+0

私の投稿を編集したことを確認してください... @SamKuhmonen – sakshi

答えて

1

代わりnewキーワード毎回を使用して、あなたは、あなたの構造の内部のリストに値を追加し、nullをチェックすることができます。

funct(){ 
if (myDictionary.ContainsKey(key)) 
    { 
     if(myDictionary[key].list1 != null) 
       myDictionary[key].list1.AddRange(s.list1); 
     else myDictionary[key].list1 = new MyStruct { list1 = s.list1 }; 

    } // this block is been called from another function 
} 

この道をあなたはすでにから構造にリスト内の値を持っている場合新しい値がリストに追加されます。あなたが値を持っておらず、リストが単にnullであれば、プログラムは今のところ行動し、新しいリストを作成します。

+0

if(myDictionary [key]!= null)... 'Program.MyStruct'および ''のオペランドに..演算子!=を適用できないエラーが発生しました – sakshi

+0

@sakshi今すぐ再チェック可能 – meJustAndrew

+0

Thanku。 ... thankuuu ...そんなに...あなたは天才です... – sakshi

0

Dictionary<TKey, TValue>に値を追加する場合は、まずキーが存在するかどうかを確認する必要があります。キーが存在しない場合はキーが存在し、値が存在しない場合はキーが既に存在するそのキーを使用して値を取得し、それを更新します。以下の例を確認してください。それがどのように動作するかを理解するのに役立ちます。以下の例を実行できますhere

//Rextester.Program.Main is the entry point for your code. Don't change it. 
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5 

using System; 
using System.Collections.Generic; 

namespace Rextester 
{ 
    public class Program 
    { 
     public static Dictionary<long, MyStruct> myDictionary = new Dictionary<long, MyStruct>(); 

     public static void Main(string[] args) 
     { 
      myDictionary.Add(1, new MyStruct { Numbers = new List<int> { 1, 2} }); 
      Add(1, 3); 

      // printing out the values 
      foreach(KeyValuePair<long, MyStruct> number in myDictionary) 
      { 
       Console.WriteLine("Key: {0}", number.Key); 
       Console.WriteLine("Values:"); 
       for(var i = 0; i < number.Value.Numbers.Count; i++) 
       { 
        Console.WriteLine(number.Value.Numbers[i]); 
       } 
      } 
     } 

     public static void Add(long key, int number) 
     { 
      if (myDictionary.ContainsKey(key)) 
      { 
       var myStruct = myDictionary[key]; 
       if (myStruct.Numbers != null) 
       { 
        myStruct.Numbers.Add(number); 
       } 
      } 
      else 
      { 
       myDictionary[key] = new MyStruct { Numbers = new List<int> { number }}; 
      } 
     } 
    } 

    public struct MyStruct 
    { 
     public List<int> Numbers; 
    } 
} 
+0

返信のためにありがとうございました.... – sakshi

+0

もう1つのクエリ...実際に私はStreamReader.ReadlLine()すべての行を読み取る...私は様々な構造要素に格納されている異なる値だけです... StreamReader.ReadLine()以外の方法はテキストファイルの行ごとに移動し、値を読み取り、それらを構造要素に割り当てます。 – sakshi

+0

私がやっていることは次のようなものです: – sakshi

関連する問題