как использовать это определение в c # со словарями - PullRequest
0 голосов
/ 16 ноября 2011
GROUP["10"]["MATH"] = 30;
GROUP["11"]["MATH"] = 40;
GROUP["9"]["CHEM"] = 50;
...

Можете ли вы сказать мне, как использовать его со словарями.Как определить словарь для этого примера?

Ответы [ 8 ]

5 голосов
/ 16 ноября 2011
Dictionary<string,Dictionary<string,int>>

Первый [] возвращает словарь, а второй [] работает с этим словарем и возвращает int

4 голосов
/ 16 ноября 2011

Вы можете создать Dictionary<Tuple<string, string>, int>, но вам лучше определить класс / пользовательскую коллекцию, чтобы лучше представить это, это зависит от того, каков ваш вариант использования.

Пример Dictionary<Tuple<string, string>, int>

var dict = new Dictionary<Tuple<string, string>, int>
           {
               { new Tuple<string,string>("10", "MATH"), 30 },
               { new Tuple<string,string>("11", "MATH"), 40 },
               { new Tuple<string,string>("9", "CHEM"), 50 }
           };
4 голосов
/ 16 ноября 2011

используйте это ......

 Dictionary<string,Dictionary<string,int>>  

Просьба перейти по этой ссылке для получения дополнительной информации .... В словарях, если вы новичок в словарях ..

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

4 голосов
/ 16 ноября 2011
Dictionary<string, Dictionary<string, int>>

Использование:

Dictionary<string, Dictionary<string, int>> dic = new Dictionary<string, Dictionary<string, int>>();
Dictionary<string, int> inner = new Dictionary<string, int>();
inner.Add("MATH", 30);
dic.Add("10", inner);

...

Доступ

dic["10"]["MATH"]
2 голосов
/ 16 ноября 2011

Опция 1 : Используйте Dictionary<string, Dictionary<string, int>>.

Dictionary<string, int> group10 = new Dictionary<string, int>();
group10.Add("MATH", 30);
Dictionary<string, int> group11 = new Dictionary<string, int>();
group10.Add("MATH", 40);
Dictionary<string, int> group9 = new Dictionary<string, int>();
group10.Add("CHEM", 50);
var group = new Dictionary<string, Dictionary<string, int>>();
group.Add("10", group10);
group.Add("11", group11);
group.Add("9", group9);

int v1 = group["10"]["MATH"]; // v1 = 30
int v2 = group["11"]["MATH"]; // v2 = 40
int v3 = group["9"]["CHEM"]; // v3 = 50

Опция 2 : Или создайте составной ключ для словаря, который переопределяет GetHashCode и Equals, или вы можете использовать Tuple.

var group = new Dictionary<Tuple<string, string>, int>();
group.Add(Tuple.Create("10", "MATH"), 30);
group.Add(Tuple.Create("11", "MATH"), 40);
group.Add(Tuple.Create("9", "CHEM"), 50);

int v1 = group[Tuple.Create("10", "MATH")]; // v1 = 30
int v2 = group[Tuple.Create("11", "MATH")]; // v2 = 40
int v3 = group[Tuple.Create("9", "CHEM")]; // v3 = 50

При использовании варианта 1 необходимо не забыть создать второй уровень Dictionary<string, int>, прежде чем добавлять целочисленные значения.

1 голос
/ 16 ноября 2011

Вы также можете создать свой собственный словарь:

public class GroupDict
{
    const string Separator = ";";

    Dictionary<string, int> _internalDict = new Dictionary<string, int>();

    public void Add(string key1, string key2, int value)
    {
        _internalDict.Add(key1 + Separator + key2, value);
    }

    public int this[string key1, string key2]
    {
        get { return _internalDict[key1 + Separator + key2]; }
        set { _internalDict[key1 + Separator + key2] = value; }
    }

    public int Count
    {
        get { return _internalDict.Count; }
    }
}

Затем вы можете использовать его как:

GroupDict groups = new GroupDict();
groups.Add("10", "MATH", 30);
// OR
groups["10", "MATH"] = 30;

Console.WriteLine(groups["10", "MATH"]);
1 голос
/ 16 ноября 2011

Примерно так может быть

Dictionary<string, Dictionary<string><int>> dict = new Dictionary<string, Dictionary<string><int>>(); 
0 голосов
/ 16 ноября 2011

Также обратите внимание, что вы не можете создать многоключевой словарь в C #.

Для этого вам потребуется собственная структура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...