[英]Need help with an array in C#
我剛剛開始學習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個集合
任何幫助,將不勝感激。
[更新]
當我最初發布此消息時,我很着急,所以我沒有時間充分解釋它的用途。 這是一些其他信息...
每天,人們對零件盒進行分類並測量零件。 每個盒子有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,但尺寸將為兩倍。
這是您要找的東西嗎?
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 array,array”(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一起使用(這是非常花哨的,但是非常有用)。
看一下MSDN文檔。 MSDN文檔不一定總是最適合作為示例,但它是一個很好的地方,當您第一次學習如何在.NET中進行編碼以及某些屬性/方法/功能的含義時,便可以開始查找如何實現某些功能。
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倍寬,因此我在C#Wiki中看到了int[,]
可能就是您想要的,但是我不知道如何設置它。
這就是我最終要做的事情:
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]);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.