相关疑难解决方法(0)

元组(或数组)作为C#中的字典键

我想在C#中创建一个Dictionary查找表.我需要将一个3元组的值解析为一个字符串.我尝试使用数组作为键,但这不起作用,我不知道还能做什么.在这一点上,我正在考虑制作一本词典字典词典,但这看起来可能不是很漂亮,尽管我会在javascript中这样做.

c# dictionary tuples hashtable

104
推荐指数
5
解决办法
9万
查看次数

多值字典

我如何在c#中创建一个多值字典?

例如Dictionary<T,T,T>,第一个T是键,其他两个是值.

所以这是可能的: Dictionary<int,object,double>

谢谢

c#

72
推荐指数
5
解决办法
11万
查看次数

基于元组或嵌套字典有益处吗?

我一直在寻找一种方法来存储和检索超过C#的通用Dictionary类提供的单个键的值.

在网上搜索(以及SO本身)向我展示了几个选项:

基于元组的词典

.NET 4.0可以轻松支持通用的Tuple <,>类.这意味着您可以使用任意元组创建一个Dictionary,即

  • var myDict = new Dictionary<Tuple<Char, Int>, MyClass>();

嵌套字典

我了解到你也可以在Dictionaries中嵌套Dictionaries,这使得访问存储的结果类似于访问N维数组.例如:

Dictionary<int, Dictionary<int, Dictionary<Char, MyClass>>>
Run Code Online (Sandbox Code Playgroud)

然后可以通过以下方式获得: MyClass foo = MyData[8][3]['W'];

定界连锁键词典

但是,虽然两者都适用于复杂数据和自定义类,但我想知道它们是否总是必要的.至少对于原始数据,看起来将键与分隔符连接起来同样有效.

//keys are char + int
Dictionary<string, MyClass> myDict = New Dictionary<string, Myclass>();
String input = myChar + "|" + myInt
MyClass foo = myDict[input]
Run Code Online (Sandbox Code Playgroud)

是否存在使这些方法中的一种优于另一种方案的情景?他们会有类似的表演时间吗?或者重点应该放在哪种方法提供最干净,最容易维护的代码上?

思考?

c# dictionary

16
推荐指数
3
解决办法
9886
查看次数

具有“如果键不在字典中则添加新值”的多维字典

SO上也有类似的问题,但没有一个回答我的问题。

我想要一个二维词典来翻译。像这样的东西:

Dictionary["DE"][TranslationKeys.Title] = "Title in German";
Dictionary["DE"][TranslationKeys.SubTitle] = "Subtitle in German";
Dictionary["PL"][TranslationKeys.Title] = "Title in Polish";
Dictionary["PL"][TranslationKeys.SubTitle] = "Subtitle in Polish";
Dictionary["EN"][TranslationKeys.Title] = "Title in English";
Dictionary["EN"][TranslationKeys.SubTitle] = "Subtitle in English";
Run Code Online (Sandbox Code Playgroud)

如果我使用传统字典就好了Dictionary<string,Dictionary<TranslationKeys,string>>

但我不想以这样的“丑陋”方式初始化它:

Dictionary = new Dictionary<string,Dictionary<TranslationKeys,string>>(){
                {"PL",new Dictionary<TranslationKeys,string>(){{TranslationKeys.SubTitle,"Subtitle in Polish"}}}
            };
Run Code Online (Sandbox Code Playgroud)

但像这样:

Dictionary["PL"][TranslationKeys.SubTitle] = "Subtitle in Polish";
Run Code Online (Sandbox Code Playgroud)

所以我尝试实现一个“智能”多维字典,如果他得到了值,它就会自行计算出来。到目前为止我所做的是一个使用 Dictionary 和特殊索引器的新通用类:

public class TranslateDictionary<TKey, TValue> where TValue : new()
{
    private Dictionary<TKey, TValue> Dictionary;
    public TValue this[TKey lang]
    {
        get
        {
            if (!Dictionary.ContainsKey(lang))
            {
                TValue obj …
Run Code Online (Sandbox Code Playgroud)

c# dictionary initialization

5
推荐指数
1
解决办法
5649
查看次数

标签 统计

c# ×4

dictionary ×3

hashtable ×1

initialization ×1

tuples ×1