参考代码:(.........有待分析)using System;
using System.Diagnostics;
using PerfCounter;namespace BenchJaggedMatrix
{
    /// <summary>
    /// Matrix Multiplication using Jagged Arrays
    /// </summary>
    class MatrixMul
    {        [STAThread]
        static void Main(string[] args)
        {
            int i, n;            // Declare jagged matrices
            double[][] MatrixA, MatrixB, MatrixC;
            Random r = new Random(50);
            n = 1000;            MatrixA = new double[n][];
            MatrixB = new double[n][];
            MatrixC = new double[n][];            /* Instantiate and Initialize Arrays */
            for (i=0; i<MatrixA.Length; i++) {
                MatrixA[i] = new double[n];
                MatrixB[i] = new double[n];
                MatrixC[i] = new double[n];
                for (int j=0; j<MatrixA[i].Length; j++) {
                    MatrixA[i][j]=(double)r.Next(50);
                    MatrixB[i][j]=(double)r.Next(50);
                }
            }            Counter counter = new Counter();            /* Call and measure Matdot */
            Console.WriteLine("Starting counter...");
            counter.Reset();
            counter.Start();
            Matdot(MatrixA, MatrixB, MatrixC);  // call MatDot
            counter.Stop();            Console.WriteLine("Time taken: {0}", counter);
            Console.WriteLine("Obtained {0:F2} MFlops", 
                              counter.MFlops(2*n*n*n));
            Console.ReadLine();
        }        public static void Matdot(double [][]a, double [][]b, 
                                  double [][]c)
        {
            int i,j,k;
            double tmp;            for (i=0; i<a.Length; i++)
            {
                for (j=0; j<c[i].Length; j++)
                {
                    tmp = c[i][j];
                    for (k=0; k<b[i].Length; k++)
                    {
                        tmp += a[i][k]*b[k][j];
                    }
                    c[i][j]=tmp;
                }
            }
        }
    }
}-------摘自网上

解决方案 »

  1.   

    to 听说C#中可以实现不规则数组,请问怎么做?
    Sample code as follows:
    int[][] nArray = new int[3];
    for( int i = 0; i < 3; i++ )
         nArray[i] = new int[i+1];
      

  2.   

    请头号愚翁:
    nArray[i]是什么东西..既然nArray被定义为一个二维整型数组,那nArray[i]是什么呢?我只知道nArray[x][y]可以访问这个二维数组中的一个指定为x和y位置的数组成员.难道说nArray[i]是指一"列"或一行的这个二维数组成员的"集合"吗??如果这样,那C,和C++中可以这样吗,这一特点是C#相对C和C++所独有的吗?那进一步而言是不是说一个N维数组,中间可以有任意i个(小于N)的确定维数和N-i个不确定维数呢?To:高歌
    为什么说它用处不大呢?是基于访问可变维(可能不准确,不是称之为不规则)数组的效能开销过大还是基于应用分析域中,遇到可归结为此的问题都可以变通为其它的处理方式例如1维数组而加以解决?
      

  3.   

    to nArray[i]是什么东西为一维数据组对象
      

  4.   

    在C#中,定义固定维数的数组应该如下:
    int[,] nArray = new int[3,2]; // a 3*2 int array 如果定义不规则维数的数组应该如下:
    int[][] nArray = new int[3]{ new int[2], new int[3], new int[4] };
      

  5.   

    to 既然nArray被定义为一个二维整型数组,那nArray[i]是什么呢?我只知道nArray[x][y]可以访问这个二维数组中的一个指定为x和y位置的数组成员.难道说nArray[i]是指一"列"或一行的这个二维数组成员的"集合"吗??对于如下定义
    int[][] nArray;
    那么这样理解,可能会更清楚一些。
    首先对于nArray来说,是一个int[]对象,而对于nArray[i]来说也是一个int[]对象,即它是逐个分解的。
      

  6.   

    数组的元素是数组的数组:int [],数组的元素是int型。(int[]) [],数组的元素是int[]型。
      

  7.   

    楼主还是看看MSDN里面关于C#数组的概念.一维,多维数组,交错数组
      

  8.   

    恩,不规则数组挺好的啊,也挺有用啊,到MSDN上去找把,他尤其对管理个人信息有用
      

  9.   

    推广到N维这样,我编译过没有报错..例
    ...
    int[,][,,] i;
    public TestClass()
    {
      this.i=new [2,3][,,];
    }
    ...上面代码的意思大概是这样的,声明一个整数数组,共有5维,将它做为2*3个包含整型数组,这2*3个整型数组中每个数组都有3维;如果要用到这2*3个整型数组中的某个数组例如i[0][2]这个位置上的整型数组那么应该这样做i[0,2]=new int[3,3,3];同理可以这样..
    i[1,0]=new int[4,2,2];
    上面两句话的意思是 位于0,2位置的整型数组i[0,2]共有3*3*3个整型元素的整数阵.
    而下面是4*2*2个整数阵特别需要指出的是:第二次new的类型必需与第一次声明保持一致,这才合乎规则和意思.否则错误.