2011-04-07 85 views
0

我剛剛開始學習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,但測量結果將是雙倍。

+0

你有實力來考慮創建一個類3個屬性,並列出一個列表而不是多維數組。 – mdm20 2011-04-07 20:49:40

回答

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]); 
    } 
} 
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,} 
    }; 
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(這是超級幻想,但非常有用)很難(如果不是不可能的話)。

1

查看MSDN文檔。 MSDN文檔並不總是最好的例子,但它是一個很好的地方,當你第一次學習如何在.NET中編寫代碼以及某些屬性/方法/功能意味着什麼時,它就開始瞭解如何實現一些東西。

Multidimensional Array MSDN Docs

+1

Jagged Arrays還有一篇不錯的文章:http://msdn.microsoft.com/en-us/library/2s05feca.aspx。這可能不是OP正在尋找的東西,但它是相關的並且很好知道。 – Odrade 2011-04-07 20:43:43

0

因爲你正在創造始終是3寬,我在C#維基的int[,]可能是你想要看到的,但我不知道如何設置它。