Лучший подход к ключу словаря с несколькими частями int?

Скажем, мой словарь должен иметь ключ с помощью комбинации ItemId и RegionId, оба int. И скажем, что тип стороны значения - «Данные». Я мог бы сделать это двумя способами:

Способ 1: многоуровневый словарь, например:

Dictionary<int, Dictionary<int, Data>>  myData;

, чтобы поиск можно было закодировать следующим образом:

Data data1  = myData[itemId][regionId];

Неплохо, но недостаток в том, что мне нужно проверьте наличие ключа на первом уровне, поэтому более безопасным кодом будет

Data data1 = null;
if (myData.ContainsKey(itemId)) data1 =  myData[itemId][regionId];

Способ 2: используйте ключ, состоящий из нескольких частей. В этом подходе я бы создал структуру для представления частей и использовал бы структуру в качестве ключа словаря:

private struct MultiPartKey
{
    public int ItemId;
    public int RegionId;
}

Dictionary<MultiPartKey, Data>  myData;

, и поиск был бы таким:

MultiPartKey mpk;
mpk.ItemId = itemId;
mpk.RegionId = regionId;
Data data1 = myData[mpk];

Возможным недостатком здесь является то, что он работает только в том случае, если моя структура состоит полностью простых типов значений, так что побитовое сравнение двух экземпляров будет равным. (Верно?)

Как вы думаете?

10
задан Gabriel McAdams 20 April 2013 в 01:42
поделиться