c# - 如何获得对应的“名称”
问题描述
我有一个 C# dictionary
,其中我有一个对应NAME
的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"
}
在上面的代码中我循环了ID
,但是如何得到对应的NAME
呢?
解决方案
我认为更好的设计是创建一个具有这两个属性的类,然后进行迭代。如果您发现自己必须为简单的数据表示同步不同的数据结构,那么我建议重新考虑设计。
public class MyClass
{
public string Id { get; set; }
public bool Name { get; set; }
}
List<MyClass>
然后在迭代时保持一个which :
foreach (var item in list)
{
// Now access item.Id, item.Name
}
当您的数据有某种自然键并且您希望通过该键访问项目时,使用字典是很好的选择。由于项目是通过哈希函数访问的,因此通过键访问是在中完成的,O(1)
而在列表中搜索是O(n)
。但是,在您的情况下,您在任何情况下都在迭代所有项目,因此不需要字典并将数据安排在一个类中是一个更好的设计。
关于差异和一些参考资料:
推荐阅读
- node.js - 协议错误 - html-pdf-node npm 包
- spring-boot - 我的 Spring Boot 应用程序要么重定向到 Spring Security 登录页面,要么显示白标错误
- java - Java 网络:AbstractMethodError
- excel-formula - 如何用值总结一列日期
- react-native - 如何升级 React Native 的项目版本
- pygame - 为播放器制作动画
- javascript - 使用javascript获取表头值
- amazon-web-services - 多少个 vCPU 适合基于云的深度学习?
- javascript - 浏览器控制台中的缓存问题安全和性能选项卡
- c# - 使用 Serilog 为每个 Id 记录到不同的日志文件