2011-04-07 89 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[,]可能是你想要看到的,但我不知道如何设置它。