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

本文关键字:哈希表 数据结构 | 更新日期: 2023-09-27 18:00:38

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

 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#中是否有可能发生这样的事情吗。

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

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

结合以下内容:

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

会给你一些非常接近你想要的语法的东西。

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

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

我会有一个类来表示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;

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

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"];