开发者

Storing in a nested dictionary C#

Broadcom 

Connection Name: Local Area Connection

DHCP Enabled:    No

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

I would like to put this into a Dictionary<string, Dictionary <string, string>> So Broadcom would be the key in the first dictionary and the rest would be value the value. The value should be stored as a dictionary where Connection Name is the key and Local Area Connection is the value. How do I 开发者_如何学Pythongo about doing that? I am new to programming. Thanks for the help.


Please do yourself a great favour and use a class for that, because in two months time you will not understand your code:

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; }
}

Now you can keep a List<WhatIsThis> around. If you have justa few of them, the O(n) cost of looking a value up is negligible. If you want a lookup by name in O(1) fashion, you can map to a Dictionary as such:

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

Gives you a Dictionary of type Dictionary<string,WhatIsThis> . What do you think, will you understand this better in 2 weeks time, or rather your scary Dictionary?


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"}
            }
        )
    }
);

My only concern would be that the IP Addresses should themselves be in a dictionary within the settings for a connection, not a single string, and thus the sub-dictionary would need to be dictionary<string, object>.

Similar to flq's answer, here's a more comprehensive solution which makes both subdictionaries:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜