none
如何取得多維字典的 total item count RRS feed

  • 問題

  • 程式定義了一個三維的字典如下

    public Dictionary<string, Dictionary<string, Dictionary<int, object>>> ComingList = new Dictionary<string, Dictionary<string, Dictionary<int, object>>>();

    Key1 = string
    Key2 = string
    Key3 = int

    請教一下 , 要如何利用 LINQ 的方式得到所有 object 的數量

    謝謝
    2014年10月3日 上午 06:43

解答

  • class Program
        {
            static void Main(string[] args)
            {
                Dictionary<string, Dictionary<string, Dictionary<int, object>>> ComingList = new Dictionary<string, Dictionary<string, Dictionary<int, object>>>();

                var result = from topDic in ComingList
                             select new
                             {
                                 TopKeyName = topDic.Key,

                                 //獲取Dictionary<string, Dictionary<int, object>>的數量
                                 SubValues = from subDic in topDic.Value
                                             select new
                                             {
                                                 SubKeyName = subDic.Key,
                                                 SubKeyValuesCount = subDic.Value.Count          
                                             },
                                TotalCount = topDic.Value.Count
                             };
               //逐層遍歷,輸出Key和對應的數量
                foreach (var item in result)
                {
                    Console.WriteLine(item.TopKeyName+"\r\n"+item.TotalCount);

                    foreach (var sitem in item.SubValues)
                    {
                        Console.WriteLine(sitem.SubKeyName+"\r\n"+sitem.SubKeyValuesCount);
                    }
                }
            }
        }

    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    • 已標示為解答 David0629 2014年10月7日 上午 02:49
    2014年10月3日 上午 09:44

所有回覆

  • class Program
        {
            static void Main(string[] args)
            {
                Dictionary<string, Dictionary<string, Dictionary<int, object>>> ComingList = new Dictionary<string, Dictionary<string, Dictionary<int, object>>>();

                var result = from topDic in ComingList
                             select new
                             {
                                 TopKeyName = topDic.Key,

                                 //獲取Dictionary<string, Dictionary<int, object>>的數量
                                 SubValues = from subDic in topDic.Value
                                             select new
                                             {
                                                 SubKeyName = subDic.Key,
                                                 SubKeyValuesCount = subDic.Value.Count          
                                             },
                                TotalCount = topDic.Value.Count
                             };
               //逐層遍歷,輸出Key和對應的數量
                foreach (var item in result)
                {
                    Console.WriteLine(item.TopKeyName+"\r\n"+item.TotalCount);

                    foreach (var sitem in item.SubValues)
                    {
                        Console.WriteLine(sitem.SubKeyName+"\r\n"+sitem.SubKeyValuesCount);
                    }
                }
            }
        }

    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    • 已標示為解答 David0629 2014年10月7日 上午 02:49
    2014年10月3日 上午 09:44
  • 多謝賜教 :)

    可否再請教一個問題 :

    如果只想取得 Key2 = XXX 的所有 objects

    => ( Key1 , (Key2 , (Key3 , objects) ) )

    是否一定還是要先遍尋 Key1 的所有 Values 

    然後一一比對 Key2 是否為 XXX , 然後才遍尋所屬的 (Key3 , objects)

    ex :
    字典內容如下 , 欲取得 Key2 = bbb 的 A & B 這兩個 value

    aaa,bbb,001,A
    aaa,bbb,002,B
    aaa,ccc,003,C
    aaa,ddd,004,D

    另外可否告知一下關於如下的 LINQ 的語法(貼近應用面的) , 可以參考哪些書籍或是網站?
    THANKS~~

    var result = from topDic in ComingList
                             select new

                           {

                           };

    2014年10月7日 上午 02:49
  • >字典內容如下 , 欲取得 Key2 = bbb 的 A & B 這兩個 value

    Key2也是Key,應該不會出現你說的那種情況(不會重複)。

    關於LINQ的用法參考,可以:

    1)http://msdn.microsoft.com/library/bb397926.aspx

    2)示例代碼101個LINQ實用指南:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b/


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年10月7日 上午 03:06
  • Thanks~

    關於提出的範例補充描述一下 (想請教的是關於程式的寫法方式)

    ex :
    字典內容如下 , 欲取得 Key2 = bbb 的 A & B & C 這 3 個 value

    aaa,bbb,001,A
    aaa,bbb,002,B
    aaa,bbb,002,C
    aaa,ccc,003,D
    aaa,ddd,004,E

    實務上只需得到 Key2 = bbb 的 所有 object( 指的是 A~E這一層)
    不知程式的寫法上是否有類似 Get [
    Don't care]["bbb"][Don't care].Values 這樣的方式嗎?
    or 透過 LINQ 的方式是否有較直覺性的寫法 ?

    請多指教~~


    2014年10月7日 上午 03:30
  • 2014年10月8日 上午 01:58