C#初始化一个字典,然后再添加到它

时间:2015-11-02 00:09:24

标签: c# dictionary

我有一个字典,将从查询结果中填充。因此,我不知道在初始化它时会进入字典的数据值(虽然显然我知道将使用哪些数据类型)。我是C#的新手 - 我怎么设置它?

在伪代码中,我想要的字典结构是:

{
    "visa": [2.75, 3.33],
    "mastercard": [1.00, 4.32],
    ...
}

这是我到目前为止所做的,但它没有编译:

//initialize the dictionary but do not populate yet
Dictionary<string, List<decimal>> cardtype_total_amount;

//simulate getting the first card type from the db
string cardtype = "visa";

//initialize the "visa" key
if (!cardtype_total_amount.ContainsKey(cardtype)) cardtype_total_amount.Add(cardtype, new List<decimal>(){0, 0});

//simulate updating the values for "visa" from the db (this would happen lots of times for each card type):
cardtype_total_amount[cardtype][0] += 0.5;
cardtype_total_amount[cardtype][1] += 1.7;

//add more keys for other cardtypes, and update their totals as per above...

2 个答案:

答案 0 :(得分:5)

我认为你只是错过了一个初始化!

//initialize the dictionary but do not populate yet
Dictionary<string, List<decimal>> cardtype_total_amount = new Dictionary<string, List<decimal>>();

[编辑] 哦,你需要在下面的小数点上有一些m,否则它们是双打的:

cardtype_total_amount[cardtype][0] += 0.5m;

答案 1 :(得分:3)

不确定这是否是你所追求的。怎么回事?

Dictionary<string, List<decimal> array
  = new Dictionary<string, List<decimal>>();

然后,对于每次读入(由键和值组成),您可以执行以下操作。

var addition = new { Key = "visa", Value = 3.14 };
array[addition.Key].Add(addition.Value);

请注意,我不在电脑上,所以我可能会输入一些信息。此外,它取决于您如何接收后续值。这里假设一次一个。如果你得到它们的完整列表,你可以将它分成字典本身。

List<Piece> bunchOfValues = ...;
Dictionary<...> results = bunchOfValues.ToDictionary(key => key.NameOrType,
  value => bunchOfValues.Where(...).Select(...));

最后,当你想要总结一切时,你可以再次进入LINQ。

decimal sum = arrayOfValues.Sum(element => element);