C# 如何获得相应的;名称“;

C# 如何获得相应的;名称“;,c#,dictionary,C#,Dictionary,我有一个C#字典,其中我有一个对应的名称,与ID相对应 Dictionary<string, List<object>> dict = new Dictionary<string, List<object>> { { "ID", new List<object> { "Id1", "Id2" } }, { "NAME", new List<object> { "True", "False" } } }; f

我有一个C#
字典
,其中我有一个对应的
名称
,与
ID
相对应

Dictionary<string, List<object>> dict = new Dictionary<string, List<object>>
{
    { "ID", new List<object> { "Id1", "Id2" } },
    { "NAME", new List<object> { "True", "False" } }
};

foreach (var id in dict["ID"])
{
    Console.WriteLine(id);
    //how to get corresponding "Name". For "Id1" = "True" and for "Id2" = "False"
}
Dictionary dict=新字典
{
{“ID”,新列表{“Id1”,“Id2”},
{“名称”,新列表{“真”、“假”}
};
foreach(dict[“id”]中的变量id)
{
控制台写入线(id);
//如何获取相应的“名称”。对于“Id1”=“True”和“Id2”=“False”
}

在上面的代码中,我循环通过
ID
,但是如何获得相应的
名称

我认为更好的设计是创建一个具有两个属性的类,然后进行迭代。如果您发现自己必须为简单的数据表示同步不同的数据结构,那么我建议重新考虑设计

public class MyClass
{
    public string Id { get; set; }
    public bool Name { get; set; }
}
然后按住
列表
,在迭代时:

foreach (var item in list)
{
    // Now access item.Id, item.Name
}

当您的数据具有某种自然键,并且希望通过该键访问某个项时,使用字典是很好的。由于项目是通过哈希函数访问的,按键访问在
O(1)
中完成,而在列表中搜索是
O(n)
。然而,在您的例子中,您在任何情况下都在迭代所有项,因此不需要字典,将数据安排在类中是更好的设计

关于差异和一些参考资料:

如果您确实可以控制字典数据,最好使用吉拉德的答案并将所有内容存储在
列表中,或者使用
字典


即使只有ID和Name的映射,也可以有非常简单的变量

  Dictionary<string,string> lookup = new Dictionary<string,string>();
  lookup.Add("ID1","True")
字典查找=新建字典();
lookup.Add(“ID1”、“True”)
如果名称是布尔类型,则在

  Dictionary<string,bool> lookup = new Dictionary<string,bool>();
字典查找=新建字典();

其他答案可能是您应该如何更好地构造代码。但是,如果您需要坚持原来的用例,您可以这样做:

//Depending on what you're dealing with: Dictionary<string, List<string>>
Dictionary<string, List<object>> dict = new Dictionary<string, List<object>>{
    {"ID", new List<object>{"Id1", "Id2"}}, 
    {"NAME", new List<object>{"True", "False"}}
};

foreach(var v in dict.Keys){            
    Console.WriteLine($"{v} = {string.Join(",", dict[v])}");
}

//Output:
//ID = Id1,Id2
//NAME = True,False
//根据您处理的内容:字典
Dictionary dict=新字典{
{“ID”,新列表{“Id1”,“Id2”},
{“名称”,新列表{“真”、“假”}
};
foreach(dict.Keys中的var v){
Console.WriteLine($“{v}={string.Join(“,”,dict[v])}”);
}
//输出:
//ID=Id1,Id2
//NAME=True,False

对于此任务来说,这不是一个很好的数据结构。它应该是一个数组。好的,你能用一些代码解释一下吗?
List
会更好。表示创建一个单独的类的答案会更好。或者甚至
Dictionary
@user584018 GiladGreen似乎在钱上。谢谢@Fabjan,我对Dictionary没有控制权,你的解决方案对我来说是一个解决办法。在Tuple中,我可以放一些类似
数据[“Id1”]
?@user584018 Tuple基本上是一个轻量级的
结构
,它只包含
Item1
Item2
以及一些方便的方法,如
。Create
。如果它确实适合您的需要,您可以使用自定义类/结构或匿名对象。好的,谢谢@法比扬
  Dictionary<string,bool> lookup = new Dictionary<string,bool>();
//Depending on what you're dealing with: Dictionary<string, List<string>>
Dictionary<string, List<object>> dict = new Dictionary<string, List<object>>{
    {"ID", new List<object>{"Id1", "Id2"}}, 
    {"NAME", new List<object>{"True", "False"}}
};

foreach(var v in dict.Keys){            
    Console.WriteLine($"{v} = {string.Join(",", dict[v])}");
}

//Output:
//ID = Id1,Id2
//NAME = True,False