数据结构消除c#中的多个哈希表

时间:2011-06-27 05:37:48

标签: c# .net winforms data-structures

我正在开发一个应用程序,其中我在运行时添加控件并跟踪这些控件我正在维护单独的哈希表,以便我以后可以轻松地执行我想要的操作。但是我有大约6个哈希表并且维护它们有点复杂。所以我想知道我是否可以将所有这些控件都放在一个数据结构中,但我应该很容易识别它们,就像我在哈希表中一样。基本上我想要的是哈希表的扩展版本,我可以在一个键中添加多个值。例如,我现在拥有的是

 hashtable addButtons = new hashtable();
 hashtable remButtons = new hashtable();

 addButtons.add(name,b);
 remButtons.add(name,r);

如果我可以做类似

的事情,现在会很酷
addButtons.add(name=>(b,r,etc,etc));

然后得到任何一个就像哈希表中的那样

addButtons[name][1]

任何人都可以在c#中告诉我这样的事情是否可行。

4 个答案:

答案 0 :(得分:3)

Dictionary<String, List<?>>怎么样?

结合这样的事情:

public static class Extensions
{
     public static void AddItemsWithName<T>(this Dictionary<String, List<T>> this, string name, params T[] items)
     {
           // ...
     }
}

会给你一些非常接近你正在寻找的语法的东西。

答案 1 :(得分:2)

不确定我是否正确理解了您的问题。像这样的东西?

var controlsDictionary = new Dictionary<string, List<Control>>();

var b1 = new Button();
var b2 = new Button();

controlsDictionary["AddButtons"] = new List<Control> { b1, b2 };

var firstButton = controlsDictionary["AddButtons"][0];

答案 2 :(得分:1)

我会有一个代表6件事的课程......

public class SomeType { // RENAME ME
    public int AddButton {get;set;}
    public string RemoveButton {get;set;}
    public DateTime Some {get;set;}
    public float Other {get;set;}
    public decimal Names {get;set;}
    public bool Here {get;set;}
} // ^^ names and types above just made up; FIX ME!

Dictionary<string,SomeType> - 然后您可以:

yourField.Add(name, new SomeType { AddButton = ..., ..., Here = ... });

var remButton = yourField[name].RemoveButton;

答案 3 :(得分:1)

听起来你想要一本词典词典,比如:

var d = new Dictionary<string, Dictionary<string, Control>>();

//Create new sub dictionary
d.Add("name1", new Dictionary<string, Control>());

//Add control
d["name1"].Add("btnOne", btnOne);

//Retrieve control
var ctrl = d["name1"]["btnOne"];