2011-05-12 152 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周内更好地理解这个,或者更确切地说你的恐怖词典?