我有一个字典,将从查询结果中填充。因此,我不知道在初始化它时会进入字典的数据值(虽然显然我知道将使用哪些数据类型)。我是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...
答案 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);