2011-05-12 147 views
1
Broadcom 

Connection Name: Local Area Connection 

DHCP Enabled: No 

IP address(es) 
    [01]: abc.de.fg.h 

我想放入Dictionary<string, Dictionary <string, string>> 這所以博通將在第一字典中的鍵,其餘的則是價值的價值存儲。值應該存儲爲一個字典,其中連接名稱是鍵和本地連接是值。我該如何去做呢?我是編程新手。謝謝您的幫助。嵌套字典C#

+2

什麼是您的數據來源以及您在哪種表格中獲得的? – abatishchev 2011-05-12 20:04:37

回答

1

http://msdn.microsoft.com/en-us/library/bb531208.aspx

var dic = new dictionary<string, dictionary <string, string>>(
    {"Broadcom", 
     new dictionary <string, string>(
      { 
       {"Connection Name", "Local Area Connection"}, 
       {"DHCP Enabled", "No"}, 
       {"IP address(es) [01]", "abc.de.fg.h"} 
      } 
     ) 
    } 
); 

我唯一擔心的是,該IP地址本身應該是一個連接,而不是一個字符串的設置內字典,因此,子字典將需要dictionary<string, object>

到FLQ的答案類似,這裏有一個更全面的解決方案,這使得雙方分字典:

using System.Collections.Generic; 
using System.Linq; 

namespace LINQDictionaryDemo 
{ 
    public class IPAddress 
    { 
     public int Index { get; private set; } 
     public string Value { get; private set; } 

     public IPAddress(int Index, string Value) 
     { 
      this.Index = Index; 
      this.Value = Value; 
     } 
    } 

    public class NetworkConnection 
    { 
     public string Name { get; set; } 
     public string ConnectionName { get; set; } 
     public bool DHCPEnabled { get; set; } 
     public List<IPAddress> IPAddresses { get; set; } 

     public Dictionary<string, object> ToDictionary() 
     { 
      return new Dictionary<string, object> 
         { 
          { "ConnectionName", ConnectionName } 
          , { "DHCPEnabled", DHCPEnabled.ToString() } 
          , {"IPAddresses", IPAddresses.ToDictionary(k => k.Index, v => v.Value)} 
         }; 
     } 
    } 

    public static class Demo 
    { 
     public static void Run() 
     { 
      var lnc = new List<NetworkConnection> 
          { 
           new NetworkConnection 
            { 
             Name = "Broadcom", 
             ConnectionName = "Local Area Connection", 
             DHCPEnabled = false, 
             IPAddresses = new List<IPAddress> {new IPAddress(1, "abc.de.fg.h")} 
            } 
          }; 
      var dic = lnc.ToDictionary(k => k.Name, v => v.ToDictionary()); 
     } 
    } 
} 
+0

如何處理.txt文件中的這個問題? – DrShah 2011-05-12 20:06:37

+0

@DrShah:你需要解析它。 – abatishchev 2011-05-12 20:08:47

+0

@DShaShah你將需要閱讀和解析文本文件到一些變量(也許一次使用TextReader/StreamReader一行:http://msdn.microsoft.com/en-us/library/aa287535%28v=vs .71%29.aspx),然後從變量創建字典。我也推薦使用一個類來封裝你的邏輯。 – 2011-05-12 20:11:49

8

請幫自己一個大忙,並使用一個類,因爲在兩個月的時間,你不會理解你的代碼:

public class WhatIsThis { 

    private List<IPAddress> ipAddresses = new List<IPAddress>(); 

    public string Name { get; set; } 
    public string ConnectionName { get; set; } 
    public bool DHCPEnabled { get; set; } 
    public List<IPAddress> IPAddresses { get return ipAddresses; } 
} 

現在你可以保留List<WhatIsThis>左右。如果你只有少數人,那麼看起來價值的O(n)成本可以忽略不計。如果你想通過名稱在O(1)的方式查找,您可以映射到詞典這樣:

var dict = listOfWhatisThis.ToDictionary(k=>k.Name, v=>v} 

給你Dictionary<string,WhatIsThis>類型的字典。你怎麼看,你會在2周內更好地理解這個,或者更確切地說你的恐怖詞典?