2014-03-29 176 views
0

我想做一個包含另一個詞典的詞典。我希望我的字典只有一個鍵有多個值,但我得到一個錯誤:「一個具有相同鍵的元素已經存在」。我已經做到了在JAVA與HashMap和它的好,但在C#...另一本詞典中的詞典+一個鍵的多個值

事情是這樣的:

static Dictionary<int, Dictionary<double, double>> _dict = new Dictionary<int, Dictionary<double, double>>() 
     { 
      { 1, new Dictionary<double,double>{ { 0.990, 0.0316 } } }, 
      { 1, new Dictionary<double,double>{ { 0.975, 0.0398 } } }, 
      { 1, new Dictionary<double,double>{ { 0.950, 0.0239 } } }, 
      { 1, new Dictionary<double,double>{ { 0.9 , 0.0158 } } }, 
      { 1, new Dictionary<double,double>{ { 0.1 , 2.71 } } }, 
      { 1, new Dictionary<double,double>{ { 0.050, 3.84 } } }, 
      { 1, new Dictionary<double,double>{ { 0.025, 5.02 } } }, 
      { 1, new Dictionary<double,double>{ { 0.010, 6.63 } } }, 

      { 2, new Dictionary<double,double>{ { 0.990, 0.02 } } }, 
      { 2, new Dictionary<double,double>{ { 0.975, 0.05 } } }, 
      { 2, new Dictionary<double,double>{ { 0.950, 0.10 } } }, 
      { 2, new Dictionary<double,double>{ { 0.9 , 0.21 } } }, 
      { 2, new Dictionary<double,double>{ { 0.1 , 4.60 } } }, 
      { 2, new Dictionary<double,double>{ { 0.050, 5.99 } } }, 
      { 2, new Dictionary<double,double>{ { 0.025, 7.38 } } }, 
      { 2, new Dictionary<double,double>{ { 0.010, 9.21 } } }, 

      { 3, new Dictionary<double,double>{ { 0.990, 0.12 } } }, 
      { 3, new Dictionary<double,double>{ { 0.975, 0.22 } } }, 
      { 3, new Dictionary<double,double>{ { 0.950, 0.35 } } }, 
      { 3, new Dictionary<double,double>{ { 0.9 , 0.58 } } }, 
      { 3, new Dictionary<double,double>{ { 0.1 , 6.25 } } }, 
      { 3, new Dictionary<double,double>{ { 0.050, 7.81 } } }, 
      { 3, new Dictionary<double,double>{ { 0.025, 9.35 } } }, 
      { 3, new Dictionary<double,double>{ { 0.010, 11.34 } } }, 
}; 

我嘗試LordTakkera的解決方案。

我這樣做是因爲我必須代表KHI2表。我在JAVA中這樣做,我的軟件完美工作,但我不知道如何在.NET中使用REF。

+0

你想有多個值一個爲什麼鍵?你怎麼知道你爲這把鑰匙獲得什麼價值? – donfuxx

+0

你不能用'Dictionary'來做。在'C#'中,Dictionary不能包含重複的鍵。 –

+0

因爲您正在覆蓋您放入Map中的數據,所以Java中的相同代碼沒有任何意義。 – svz

回答

0

如果您有重複鍵,如下所示,您需要在單個內部字典中使用所有這些值。

{ 1, new Dictionary<double,double>{ { 0.990, 0.0316 } } }, 
{ 1, new Dictionary<double,double>{ { 0.975, 0.0398 } } }, 
{ 1, new Dictionary<double,double>{ { 0.950, 0.0239 } } }, 
{ 1, new Dictionary<double,double>{ { 0.9 , 0.0158 } } }, 
{ 1, new Dictionary<double,double>{ { 0.1 , 2.71 } } }, 
{ 1, new Dictionary<double,double>{ { 0.050, 3.84 } } }, 
{ 1, new Dictionary<double,double>{ { 0.025, 5.02 } } }, 
{ 1, new Dictionary<double,double>{ { 0.010, 6.63 } } }, 

變爲:

{ 1, new Dictionary<double,double>{ 
    { 0.990, 0.0316 }, { 0.975, 0.0398 }, { 0.975, 0.0398  
    }, ........ }} 
0

由於您的錯誤提示,你不能有多個值與一個C#字典相同的密鑰。這很好,重複鍵會返回什麼值?這最好是未定義的行爲。

但是,你正在寫的代碼將正常工作的一個好辦法:

static Dictionary<int, List<Dictionary<double, double>> = new Dictonary<int, List<Dictionary<double, double>>() 
{ 
    {1, new List<Dictionary<double, double>() 
     { 
      new Dictionary<double,double>{ { 0.990, 0.0316 } }, 
      new Dictionary<double,double>{ { 0.975, 0.0398 } } 
     } 
    }, 
    ... 
} 

鍵可以映射到集合(可容納集合本身)。從您發佈的代碼中,這看起來像是最可能的解決方案。讓我知道我是否可以澄清任何事情!

UPDATE:如果你保證這些「嵌套」字典只有一個元素,你可以使用對方的回答,或KeyValuePair:

static Dictionary<int, List<KeyValuePair<double, double>> = new Dictonary<int, List<KeyValuePair<double, double>>() 
{ 
    {1, new List<KeyValuePair<double, double>() 
     { 
      { 0.990, 0.0316 }, 
      { 0.975, 0.0398 } 
     } 
    }, 
    ... 
} 
+0

@svz,感謝您的評論!我更新了我的答案以包含該選項。 – BradleyDotNET