我刚刚开始学习c#,我遇到了数组问题。我想要的数组将是多维的,但我不确定正确的方法来设置它。这个数组中总共有三个维度,如果打印出来,它看起来就像这样:
1, 23, 6.4
1, 29, 1.0
1, 3, 8.68
1, 12, 0.001
1, -5, 0
2, 83, -5
2, 5, 14
2, 19, -12.5
2, 62, 8
2, 81, 1
3, 0, 1.4
3, 11, 1.7848
3, 55, 64.4
3, 82, 23
3, 6, 73.4
维度1将具有可变数量的集合(将从数据库中提取) 尺寸2总是有5套 尺寸3总是有1套
任何帮助都将不胜感激。
[UPDATE]
当我最初发布此内容时,我很匆忙,因此我没有时间完全解释这将用于什么。这是一些额外的信息...
每天人们对零件盒进行分类并对零件进行测量。每个盒子有5个需要测量的部分。
B1 - > P1:M,P2:M,P3:M,P4:M,P5:M
B2 - > P1:M,P2:M,P3:M,P4:M,P5:M
B3 - > P1:M,P2:M,P3:M,P4:M,P5:M
。
。
。
Bn - > P1:M,P2:M,P3:M,P4:M,P5:M
其中“B”是框上的信息(框serial_no),“P”是关于每个部分的信息(part_no),“M”是每个部分的测量。一个盒子里总会有5个部分,我们每个部分只会进行一次测量,但是会有不同数量的盒子。
在我发布之前,我已经对数组([]),多维数组([,]),锯齿状数组([] []),列表以及所有这些数据的组合进行了研究。我知道对于数组,你必须指定每个维度的大小,而对于列表,你可以添加更多的维度。
有没有办法可以组合2D(可以保存每个部分的测量信息)和一个列表(可以保存框列表)?
框信息为int,零件信息为int,但测量值为double。
答案 0 :(得分:2)
这是你要找的吗?
class Program
{
public static void Main()
{
var hey = new int[][]
{
new int[]{11, 12, 13},
new int[]{21, 22, 23},
new int[]{31, 32, 33},
};
foreach (var row in hey)
{
foreach (int i in row)
{
Console.Write("{0} ", i);
}
Console.WriteLine();
}
Console.ReadLine();
}
}
这个想法是你有一个数组数组。 var hey = new int [] [],表示你正在创建一个“int数组,数组”(int [] [])。当您想要访问其中一个要编写的元素时
var myElement = hey[x][y];
其中x是行,y是该行y列中的整数。
希望这会有所帮助:)
编辑:
我现在看到你想要多维数组。我开始时错过了。你已经发布了一个解决方案,但为了使我的答案完整,你也可以像这样实例化多维数组(三维整数数组):
public static void Main()
{
var hey = new string[,,] {
{
{ "000", "001", "002" },
{ "010", "011", "012" },
{ "020", "021", "022" },
},
{
{ "100", "101", "102" },
{ "110", "111", "112" },
{ "120", "121", "122" },
},
{
{ "200", "201", "202" },
{ "210", "211", "212" },
{ "220", "221", "222" },
},
};
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < 3; y++)
{
for (int z = 0; z < 3; z++)
{
Console.WriteLine("{0}{1}{2} = {3}", x, y, z, hey[x, y, z]);
}
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine();
}
Console.ReadLine();
}
使用多维数组的问题是,数组中没有行或列的概念(仅在访问器内)。所以没有内置方法只能获得第一行,或者第一列中的值等等......这使得使用Linq很困难(如果不是不可能)(这非常有用,但非常有用)。 / p>
答案 1 :(得分:1)
查看MSDN文档。 MSDN文档并不总是最好的示例,但是当您第一次学习如何使用.NET编写代码以及某些属性/方法/功能意味着什么时,它是开始了解如何实现某些内容的好地方。
答案 2 :(得分:0)
var multiDimArray = new object[]
{
new int[] {0, 1, 2, 3},
new string[] {"A", "B", "C", "D"},
new double[] {23.45, 0d, 18.9},
new int[] {23, 45, 67, 23, 3433, 5656, 1,}
};
答案 3 :(得分:0)
由于您创建的内容总是3宽,我在C#维基中看到int[,]
可能是您想要的,但我不知道如何设置它。
答案 4 :(得分:0)
这就是我最终做的事情:
List<PartMeasurements> N = new List<PartMeasurements>();
N.Add(new PartMeasurements(24, new double[,] { {54, -0.146}, {9, 1.2}, {16, 0.097}, {15, 1}, {64, -0.9774} }));
N.Add(new PartMeasurements(4, new double[,] { {32, 0.76}, {45, 1.472}, {18, 0.005}, {52, 1.1}, {31, -0.1} }));
N.Add(new PartMeasurements(73, new double[,] { {81, 1.56}, {24, 1.34}, {9, 0.2}, {2, 0.6}, {55, -0.5} }));
public class PartMeasurements
{
public int BoxSerial_No;
public double[,] partNumber_and_Measurement = new double[5, 1];
public Numbers(int BoxSerial_No, double[,] partNumber_and_Measurement)
{
this.BoxSerial_No = BoxSerial_No;
this.partNumber_and_Measurement = partNumber_and_Measurement;
}
}
如果我想看看“N”中的内容,我可以这样做:
foreach(var x in N)
{
Console.Write("{0}\t", x.BoxSerial_No);
for (int y = 0; y < x.partNumber_and_Measurement.GetLength(0); y++)
{
Console.Write("{0} ", x.partNumber_and_Measurement[y, 0]);
Console.Write("{0} ", x.partNumber_and_Measurement[y, 1]);
}
}