C#具有已定义维度的字典数组

时间:2017-05-17 11:49:07

标签: c# arrays dictionary custom-type

我正在尝试为我的项目定义自定义类型。我会尝试解释我想要实现的目标。我有n * m个包。每个包具有不同的成分(CO 2,H 2 O,NO,CO的质量......)。我想在我的自定义类型中存储所有数据包的组成。 每个数据包的组成可以是这样的字典:

Dictionary<string, double>

作为一个例子:

packetComposition["CO2"]  = 2.6;
packetComposition["O2"]  = 1.7;

关键是所有这些词典都应存储在某种n m数组中。所以我可以在一个地方组成所有n m包。

显然这个数组不能像double [,]或int [,],...因为内容将是字典,而不是intdouble

知道如何将所有这些词典存储在自定义类型的n * m维度中吗? 感谢

3 个答案:

答案 0 :(得分:2)

您当然可以使用Dictionary<string, double>[,]来保存数据:

var packets = new Dictionary<string, double>[2, 3]
{
    { new Dictionary<string, double>(), new Dictionary<string, double>(), new Dictionary<string, double>(), },
    { new Dictionary<string, double>(), new Dictionary<string, double>(), new Dictionary<string, double>(), },
};

packets[1, 0]["CO2"] = 2.6;
packets[1, 1]["CO2"] = 2.4;
packets[1, 2]["CO2"] = 2.9;

答案 1 :(得分:1)

您可以创建自己的包类型,其中包含所有化合物,例如

 public class Packet
 {
      public Dictionary<string, decimal> Compounds { get; }

      public Packet()
      {
           Compounds = new Dictionary<string, decimal>();
      }
 }

你可以像这样使用它

List<Packet> packets = new List<Packet>();

Packet packet = new Packet();
packet.Compounds.Add("CO2", 2.6);
packet.Compounds.Add("O2", 1.7);

packets.Add(packet);

答案 2 :(得分:0)

你应该为此创建自己的类。然后,您可以轻松创建实例并将它们放入列表中:

class Composition
{
    public string Name { get; set; }
    public double Value { get; set; }
}

现在将它们放入一个多维数组:

Composition[,] myInstances = new Composition[n,m];
myInstanes[0,0] = new Composition { Name = "CO2", Value = 2.6 };
myInstanes[0,1] = new Composition { Name = "O2", Value = 1.7 };