Dorababu Meka

Dorababu Meka

  • 225
  • 8.3k
  • 1.7m

Loop through for each key in Multi key dictionary

Mar 21 2012 11:22 AM
I have written a code for adding multiple keys for a dictionary for that I defined my dictionary as follows and added the keys and values

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

Now I would like to loop through each keys in-order to get the required items can any one tell how can I loop through for each key value as per my dictionary

My code

protected void Page_Load(object sender, EventArgs e)
    {
        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;
    }

Answers (4)