структура данных для устранения нескольких хеш-таблиц в c # - PullRequest
3 голосов
/ 27 июня 2011

Я занимаюсь разработкой приложения, в которое я добавляю элементы управления во время выполнения, и для отслеживания этих элементов управления я поддерживаю отдельные хеш-таблицы, чтобы мне было легко делать то, что я когда-либо захочу с ними позже.Но у меня около 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 ]

3 голосов
/ 27 июня 2011

Как насчет Dictionary<String, List<?>>?

В сочетании с чем-то вроде этого:

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

даст вам что-то очень похожее на синтаксис, который вы ищете.

2 голосов
/ 27 июня 2011

Не уверен, что правильно понял ваш вопрос.Как то так?

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];
1 голос
/ 27 июня 2011

Похоже, вы хотите словарь словарей, что-то вроде:

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"];
1 голос
/ 27 июня 2011

У меня был бы класс, представляющий 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...