最快的以下Mapping对象(Dictionary,Tuple,KeyvaluePair)

时间:2013-04-08 14:52:24

标签: c# optimization data-structures dictionary hashmap

目前我有这样的映射设置

//Identifiers to save (currently)
Dictionary<string, Dictionary<string, string>> toSaveIdentifiers =
    new Dictionary<string, Dictionary<string, string>>(); //

但是,我想为它添加一个额外的维度,因为我错过了一个额外的属性来添加。

我正在尝试设置一种在程序中经常填充的某种形式的映射,并在整个程序中查找。我想知道这样做的最佳方法是什么。

//Identifiers to save (tuple)
Dictionary<Tuple<string,string>, Dictionary<string, string>> toSaveIdentifiers =
    new Dictionary<Tuple<string, string>, Dictionary<string, string>>(); //

//Identifiers to save (adding another dictionary dimension)
Dictionary<string, Dictionary<string,Dictionary<string, string>>> toSaveIdentifiers =
    new Dictionary<string, Dictionary<string, Dictionary<string, string>>>(); //

//Identifiers to save (adding keyvaluepair)
Dictionary<KeyValuePair<string,string>, Dictionary<string, string>> toSaveIdentifiers =
    new Dictionary<KeyValuePair<string, string>, Dictionary<string, string>>(); //

当我填充它/查找时,我会做类似的事情。

   // check identifier map dictionary
    if (dictionary.Keys.Contains(identifier))
    {
        if (dictionary[identifier].Keys.Contains(currency))
        {
            //stuff
        }
        else
        {
            //stuff
        }
    }
    else
    {
            //more stuff
    }

为查找执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

由于您的标识符似乎都是字符串类型,因此您可以将它们全部连接成一个大字符串并将其用作键。然后你不必做嵌套的Contains,而只需要做一个。到存储不同级别的标识符时,它也会更灵活。

即。给定2级密钥,它是

string ident = level1Identifier + "." + level2Identifier;

(使用string.format()或StringBuilder会更有效,但这段代码更适合解释)

还要考虑加入字符应该是您知道的不会出现在任何级别标识符中的内容,以避免混淆或意外重复。