我是一个古老的程序员,所以我很习惯滥用数组,但我需要开始使用字典,因为它们可以动态扩展而数组不能.
现在......我需要填充太阳系的值,太阳系中的每个物体可能有大约20-30个不同的值.
我的目的是使用一个字典,每个人都拥有自己独特的Key和一个值,例如......
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>()
Run Code Online (Sandbox Code Playgroud)
等等...
我的问题是从所有这些词典中检索值的最佳方法是什么?每个'body'的关键在每个字典中都是一样的.我知道我可以用很多循环来做这个,但这对CPU周期来说似乎很浪费,这对我来说是件坏事.
我也考虑过词典,列表但是还有其他我不喜欢的问题.
use*_*674 10
创建一个复合类型,然后使用它.
如果密钥是唯一标识符 - 行星ID,那么坚持使用词典是合适的吗?一个星球的名字? - 必须用于查找数据.不要忘记对字典的迭代是非确定性的.
Dictionary<int,PlanetaryBody> Bodies = new Dictionary<int,PlanetaryBody>()
Run Code Online (Sandbox Code Playgroud)
另一方面,如果行星仅被迭代(或通过位置索引访问),则序列是合适的.在这种情况下,使用List通常很有效.
List<PlanetaryBody> Bodies = new List<PlanetaryBody>();
// Unlike arrays, Lists grows automatically! :D
Bodies.Add(new PlanetaryBody { .. }); 
Run Code Online (Sandbox Code Playgroud)
(我很少在列表上选择一个数组 - 有时候更好,但不经常.)
复合类型(即类)用于将不同的属性分组为更大的概念或分类组:
class PlanetaryBody {
    public string Name { get; set; }
    public double Mass { get; set; }
    // etc.
}
Run Code Online (Sandbox Code Playgroud)