现在我的字典中填入了一个帐户作为键,一个List作为值。我相信我的代码正在努力填充它。但我的下一步是遍历与特定键相关联的List,并对列表执行操作(获取每个字段的总和)。我不熟悉字典,所以我不确定如何访问值并执行操作。当我退出while循环时,我想做这个求和并在我的每个循环中打印出来。
1)如果我能弄清楚如何访问DataRecords中的每个字段(在foreach循环内),我可能会弄清楚如何进行求和。
2)还在寻找一种打印值的方法,以便我可以看到它是否正确填充。
static void Main(string[] args)
{
Dictionary<string, List<DataRecord>> vSummaryResults = new Dictionary<string, List<DataRecord>>();
while (!r.EndOfStream)
{
if (control == "1")
{
// Need to add List<Datarecords> into dictionary...
if (vSummaryResults.ContainsKey(records.account))
{
vSummaryResults[records.account].Add(records);
}
else
{
vSummaryResults.Add(records.account, new List<DataRecord>());
vSummaryResults[records.account].Add(records);
}
}
}
foreach (List<DataRecord> rec in vSummaryResults.Values)
{
Console.WriteLine(rec.); dictionary.
}
vWriteFile.Close();
Console.ReadLine();
}
这是我用作列表中对象的DataRecord
类。
公共类DataRecord { 田..... }
答案 0 :(得分:3)
对于字典上的迭代,我们使用KeyValuePair:
foreach (KeyValuePair<string, List<DataRecord>> kvp in vSummaryResults)
{
string key = kvp.Key;
List<DataRecord> list = kvp.Value;
Console.WriteLine("Key = {0}, contains {1} values:", key, list.Count);
foreach (DataRecord rec in list)
{
Console.WriteLine(" - Value = {0}", rec.ToString()); // or whatever you do to put list value on the output
}
}
答案 1 :(得分:1)
你有一本字典
Dictionary<string, List<DataRecord>> vSummaryResults = new Dictionary<string, List<DataRecord>>();
你可以做一个
foreach (List<DataRecord> recs in vSummaryResults.Values)
{
foreach (DataRecord rec in recs)
Console.WriteLine(rec.Something);
}
您还没有指定DataRecord的外观,但您会获得一个列表列表。可能有一个可爱的Linq表达式可以做同样的事情。
答案 2 :(得分:1)
你需要在第一个循环中使用另一个循环来获取列表中的值。
foreach (List<DataRecord> rec in vSummaryResults.Values)
{
foreach(DataRecord data in rec)
{
Console.WriteLine(data .YourProperty);
}
}
如果您知道密钥:
foreach (List<DataRecord> rec in vSummaryResults[key])
{
foreach(DataRecord data in rec)
{
Console.WriteLine(data .YourProperty);
}
}
答案 3 :(得分:0)
我举了一个简单的例子。它是一个字符串列表,但你可以做object.ToString()来得到一些tekst;
要遍历键所包含的列表,您需要再次遍历该列表,这是第二个foreach所做的。
Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
List<String> ls = new List<string>();
ls.Add("item1");
ls.Add("item2");
dictionary.Add("it1", ls);
dictionary.Add("it2", ls);
foreach (var item in dictionary)
{
foreach(var it in item.Value)
{
Console.WriteLine(it);
}
}
答案 4 :(得分:0)
通过阅读您的代码我理解它,您有一个字典,其中每个键都有一个DataRecord类型的列表。
使用当前循环
Regular list comprehension/Regular loop: 3.8275507260113955
Itertools.product/Regular loop: 2.764477888995316
Regular list comprehension/Generator: 0.00015614699805155396
Itertools.product/Generator: 2.8045845669985283
您遍历每个DataRecord类型的列表。要访问存储在每个列表中每个对象中的数据,您需要包含另一个foreach循环来遍历列表中的对象。
foreach (List<DataRecord> rec in vSummaryResults.Values)
{
Console.WriteLine(rec.); dictionary.
}
您无法修改foreach循环中的数据,但您可以添加更简单的数据结构来执行您想要的任何换向等。
答案 5 :(得分:0)
以下是我需要做的代码。按照我现在需要的方式工作,感谢大家的帮助。
int iSumOpen = 0;
foreach (KeyValuePair<string, List<DataRecord>> kvp in vSummaryResults)
{
string key = kvp.Key; //assigns key
List<DataRecord> list = kvp.Value; //assigns value
Console.WriteLine("Key = {0}", key);
iSumOpen = 0;
foreach (DataRecord rec in list)
{
if (vSummaryResults.ContainsKey(key))
{
iSumOpen += rec.open;
}
else
{
vSummaryResults.Add(key, list);
}
}
Console.WriteLine(iSumOpen);
}