Цикл для каждого ключа в многоключевом словаре - PullRequest
0 голосов
/ 21 марта 2012

Я написал код для добавления нескольких ключей для словаря, для которого я определил свой словарь следующим образом и добавил ключи и значения

Dictionary<int, Dictionary<int, List<int>>> outerDictionary = new Dictionary<int, Dictionary<int, List<int>>>();

Теперь я хочу выполнить циклчерез каждый ключ, чтобы получить необходимые элементы, любой может сказать, как я могу пройти через для каждого значения ключа в соответствии с моим dictionary

моим кодом

Dictionary<int, Dictionary<int, List<int>>> outerDictionary = new Dictionary<int, Dictionary<int, List<int>>>();
Dictionary<int, List<int>> innerDictionary;

    ArrayList arrPayPeriodID = new ArrayList();
    ArrayList arrPayYear = new ArrayList();
    ArrayList arrEmpID = new ArrayList();

    int[] ipayYear = new int[] { };
    int[] iPayPeriodID = new int[] { };
    int[] iEmpID = new int[] { };

    int ipayYr = 2011;
    int ipayYr1 = 2011;
    int ipayYr2 = 2012;
    int ipayYr3 = 2012;

    int PayPeriodID = 1;
    int payperiodid1 = 2;
    int payperiodid2 = 2;
    int payperiodid3 = 2;

    int EmpID = 1;
    int EmpID1 = 1;
    int EmpID2 = 1;
    int EmpID3 = 1;

    arrEmpID.Add(EmpID);
    arrEmpID.Add(EmpID1);
    arrEmpID.Add(EmpID2);
    arrEmpID.Add(EmpID3);

    arrPayPeriodID.Add(PayPeriodID);
    arrPayPeriodID.Add(payperiodid2);
    arrPayPeriodID.Add(payperiodid3);
    arrPayPeriodID.Add(payperiodid1);

    arrPayYear.Add(ipayYr);
    arrPayYear.Add(ipayYr1);
    arrPayYear.Add(ipayYr2);
    arrPayYear.Add(ipayYr3);

    iEmpID = (int[])arrEmpID.ToArray(typeof(int));

    iPayPeriodID = (int[])arrPayPeriodID.ToArray(typeof(int));

    ipayYear = (int[])arrPayYear.ToArray(typeof(int));


    DataTable table = GetTable(iEmpID, ipayYear, iPayPeriodID);
    DataRow row = table.Rows[0];

    for (int i = 0; i < table.Rows.Count; i++)
    {
        DataRow row1 = table.Rows[i];
        var employeeId = (int)row1["EmpID"];
        var payYear = (int)row1["Year"];
        var payId = (int)row1["PayID"];



        if (!outerDictionary.TryGetValue(employeeId, out innerDictionary))
        {
            innerDictionary = new Dictionary<int, List<int>>();
            outerDictionary.Add(employeeId, innerDictionary);
        }
        List<int> list;
        if (!innerDictionary.TryGetValue(payYear, out list))
        {
            list = new List<int>();
            innerDictionary.Add(payYear, list);
        }

        list.Add(payId);
    }

static DataTable GetTable(int[] empID, int[] payYr, int[] payID)
{

    // Here we create a DataTable with four columns.
    DataTable table = new DataTable();
    table.Columns.Add("EmpID", typeof(int));
    table.Columns.Add("Year", typeof(int));
    table.Columns.Add("PayID", typeof(int));

    // Here we add five DataRows.
    for (int i = 0; i < empID.Length; i++)
    {
        table.Rows.Add(empID[i], payYr[i], payID[i]);
    }
    return table;
}

Ответы [ 4 ]

3 голосов
/ 21 марта 2012

Чтобы пройти через внешние и внутренние клавиши по порядку:

foreach (int key in outerDictionary.Keys.OrderBy(i=>i))
{
    // loop through the inner items by key
    var item = outerDictionary[key];
    foreach(int innerKey in item.Keys.OrderBy(i=>i))
    {
        ....
    }
}
2 голосов
/ 21 марта 2012
Dictionary<int, Dictionary<int, List<int>>> outer = new Dictionary<int, Dictionary<int, List<int>>>();
foreach(var outerKey in outer.Keys.OrderBy(x => x))
{
    foreach(var innerKey in outer[outerKey].Keys.OrderBy(x => x))
        Console.WriteLine(outer[outerKey][innerKey]);
}
0 голосов
/ 21 марта 2012

Это дает мне лучшее решение

foreach(int outerKey in outerDictionary.Keys)
   {
      Dictionary<int, List<int>> outerValue = outerDictionary[outerKey];

      foreach(int innerKey in outerValue.Keys)
      {
          List<int> innerValue = outerValue[innerKey];
          foreach(int item in innerValue)
          {
             // do something with item
          }
      }
   } 
0 голосов
/ 21 марта 2012

Попробуйте это;

Dictionary<int, Dictionary<int, List<int>>> outerDictionary = new Dictionary<int, Dictionary<int, List<int>>>();

        foreach (var pair in outerDictionary)
        {
            foreach (var temp in pair.Value)
            {
                // do something
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...