C:如何遍历字典中的值列表list<>?

c#: How to iterate through a List<>, that is a value in a dictionary?

现在,我有一个字典,里面填充了一个帐户作为键,一个列表作为值。我相信我的代码正在努力填充它。但我的下一步是遍历与一个特定键相关联的列表,并对该列表进行一些处理(为每个字段获取总和)。我不太熟悉字典,所以我不知道如何访问值和执行操作。当我退出while循环时,我想做这个求和并在for each循环中打印出来。

1)如果我能弄清楚如何访问数据记录中的每个字段(在foreach循环中),我可能会弄清楚如何进行求和。

2)还要寻找一种方法来打印这些值,这样我就可以查看它是否被正确填充。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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类,我将其用作列表中的对象。

公共类数据记录{领域。。。。。}


对于字典上的迭代,我们使用keyValuePair:

1
2
3
4
5
6
7
8
9
10
11
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
2
3
4
5
6
7
foreach (List<DataRecord> rec in vSummaryResults.Values)
{
    foreach(DataRecord data in rec)
    {
        Console.WriteLine(data .YourProperty);
    }
}

如果你知道钥匙:

1
2
3
4
5
6
7
foreach (List<DataRecord> rec in vSummaryResults[key])
{
    foreach(DataRecord data in rec)
    {
        Console.WriteLine(data .YourProperty);
    }
}


你有字典

Dictionary> vSummaryResults = new Dictionary>();

你可以做一个

1
2
3
4
5
foreach (List<DataRecord> recs in vSummaryResults.Values)
{
    foreach (DataRecord rec in recs)
       Console.WriteLine(rec.Something);
}

您尚未指定数据记录的外观,但会得到一个列表。可能有一个可爱的Linq表情也能做到。


这是我需要做的事情的代码。按我现在需要的方式工作,谢谢大家的帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    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);
        }

我是通过阅读代码来理解的,你有一个字典,其中每个键都有一个类型数据记录的列表。

用你当前的循环

1
2
3
4
5
foreach (List<DataRecord> rec in vSummaryResults.Values)
    {
        Console.WriteLine(rec.);  dictionary.

    }

您遍历了类型数据记录的每个列表。要访问存储在每个列表中的每个对象中的数据,需要包含另一个foreach循环来循环访问列表中的对象。

1
2
3
4
5
6
7
8
9
 foreach (var rec in vSummaryResults.Values)
    {
        // At this point we have access to each individual List<DataRecord>
    foreach(var SingleDataRecordObj in rec)

     Console.WriteLine(ingleDataRecordObj.membervariablename)
      //From here we are able to list the individual variable member names      of values that are in the DataRecord data type, showing all of the information in each list that is stored in the values of the dictionary

    }

您不能修改foreach循环中的数据,但是您可以添加一个更简单的数据结构来执行您想要的任何交换等。


我举了一个简单的例子。它是一个字符串列表,但您可以执行object.toString()以获取一些tekst;

要循环遍历键所包含的列表,需要再次迭代该列表,这就是第二个foreach所做的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
    }
}