C# C语言中词典的使用#

C# C语言中词典的使用#,c#,dictionary,C#,Dictionary,我是一个老程序员,所以我非常习惯于滥用数组,但我需要开始使用字典,因为它们可以动态扩展,而数组不能 现在。。。我需要填充一个太阳系的值,在这个太阳系中,每个物体可能有20-30个不同的值 我的意图是使用一个字典,其中每个实体都有自己的唯一键和值,例如 Dictionary<int,string> BodyName = new Dictionary<int,string>() Dictionary<int,int> BodySize = new Dictiona

我是一个老程序员,所以我非常习惯于滥用数组,但我需要开始使用字典,因为它们可以动态扩展,而数组不能

现在。。。我需要填充一个太阳系的值,在这个太阳系中,每个物体可能有20-30个不同的值

我的意图是使用一个字典,其中每个实体都有自己的唯一键和值,例如

Dictionary<int,string> BodyName = new Dictionary<int,string>()
Dictionary<int,int> BodySize = new Dictionary<int,int>()
Dictionary<int,int> BodyX = new Dictionary<int,int>()
Dictionary<int,int> BodyY = new Dictionary<int,int>()
Dictionary<int,int> BodyVelocity = new Dictionary<int,int>()
Dictionary BodyName=newdictionary()
字典正文大小=新字典()
字典BodyX=新字典()
字典BodyY=新字典()
Dictionary BodyVelocity=新字典()
等等

我的问题是,从所有这些字典中检索值的最佳方法是什么? 每个“body”的键在每个字典中都是相同的。我知道我可以用很多循环来实现这一点,但这似乎对CPU周期非常浪费,这对我来说是一件坏事


我也考虑了Dictionary,List,但还有其他我不太喜欢的问题。

创建一个复合类型,并使用它

如果密钥是唯一标识符(行星ID?行星名称?),则使用字典是合适的,必须使用该标识符来查找数据。不要忘记字典上的迭代是不确定的

Dictionary<int,PlanetaryBody> Bodies = new Dictionary<int,PlanetaryBody>()

创建一个复合类型,并使用它

如果密钥是唯一标识符(行星ID?行星名称?),则使用字典是合适的,必须使用该标识符来查找数据。不要忘记字典上的迭代是不确定的

Dictionary<int,PlanetaryBody> Bodies = new Dictionary<int,PlanetaryBody>()

只需要使用一个类就可以了

public class Planet {
   public int Id { get; set; }
   public string Name { get; set; }
   public int Size { get; set; }
  // and so on for each property of whatever type you need.
}
当你需要一颗新的行星时,请重新开始:

var planet = new Planet();
planet.Name = "Saturn";
// again finish populating the properties.
要将其添加到列表中,请执行以下操作:

var list = new List<Planet>();
list.Add(planet);
// adding the planet you created above.
var list=newlist();
增加(行星);
//添加您在上面创建的行星。

然后使用LINQ查看操作列表等等,只需使用一个类即可

public class Planet {
   public int Id { get; set; }
   public string Name { get; set; }
   public int Size { get; set; }
  // and so on for each property of whatever type you need.
}
当你需要一颗新的行星时,请重新开始:

var planet = new Planet();
planet.Name = "Saturn";
// again finish populating the properties.
要将其添加到列表中,请执行以下操作:

var list = new List<Planet>();
list.Add(planet);
// adding the planet you created above.
var list=newlist();
增加(行星);
//添加您在上面创建的行星。


然后使用LINQ

Erm查看操作列表等,你不应该只创建一个名为
Body
的类,包含5个字段,然后创建一个
字典
?不确定为什么不使用一个类。与其为太阳系天体的每个属性创建一个字典,不如创建一个包含所有信息的类planet例如,了解一个太阳系天体,制作一本行星词典。(如果不需要按键查找,请列出)你是一个老程序员,当你看到
BodyName
BodySize
BodyX
…你为什么要在OOP语言中将同一个对象的各个属性作为单独的值来对待呢?我已经老了,不太习惯OOP了…;)呃,你难道不应该创建一个名为
Body
的类吗>有5个字段,然后有一个
字典
?不确定为什么不使用类。与其为太阳系天体的每个属性创建字典,不如创建一个包含太阳系天体所有信息的类planet,例如,创建一个行星字典。(如果不需要按键查找,请列出)你是一个老程序员,当你看到
BodyName
BodySize
BodyX
…你为什么要在OOP语言中将同一个对象的各个属性作为单独的值来对待呢?我已经老了,不太习惯OOP了…;)我也看过类…尽管我可能被误认为是about类有一些糟糕的性能问题。但除此之外,我应该尝试使用一个类作为主体,并在主体中设置属性。@user2411504使用这样的类不会有性能问题(它可能比许多dictionary对象的性能更好)。编写干净的代码,做到这一点;简单(但足够灵活),可以理解,可维护。想想看,我所有的项目都有数百个类的速度有多慢!-只是开玩笑,它们很快:D通过。这不是3%,所以不要担心性能。很好…我将开始准备使用类来存储所有数据。我也看过类…尽管我可能对类有误解有一些糟糕的性能问题。但除此之外,我应该尝试使用一个类作为主体,并在主体中设置属性。@user2411504使用这样的类不会有性能问题(它可能比许多dictionary对象的性能更好)。编写干净的代码,做到这一点;简单(但足够灵活),可以理解,可维护。想想看,我所有的项目都有数百个类的速度有多慢!-开玩笑吧,它们很快:D通过。这不是3%,所以不要担心性能。很好…我将开始准备使用类来存储所有数据。我想知道的一件事是类的内存使用率,这和字典还是几乎一样。最终会添加数千个或数万个实体。具体取决于。您应该查看字典中使用的底层对象。性能影响通常发生在对数据的操作中。这有各种收集类型。一种可能比另一种更好ust再次取决于你在做什么。综上所述,我肯定会从课程开始,你可以根据你的标准填充到需求和单元测试的集合中,看看什么最适合你。总之,我不认为这有一个通用的答案。除了将被更新和访问的主体的位置分配。所以我可能会研究对这些特定值的一些特殊处理。大多数关联集合下面都使用哈希表。你甚至可能会这样做。在我的测试中,哈希表非常灵活。而且,如果你真的认真对待这一点,听起来好像你是(顺便说一句,这很好),