2013-07-22 11 views
5

iUnterschied zwischen Doppel [* *] zu verdoppeln [] [] in C#

double [,] marks=new double[26,5] 
int[] function = object.verify(marks) 

public void verifymarks(double[][] marks) 

Fehler verwendet i erhalten, ist von Doppel nicht konvertieren kann [,] [verdoppeln] [] Ich habe versucht, im Internet suchen, aber keine Lösung finden. Ich habe gerade begonnen, C# zu verwenden. Bitte Hilfe. THankx im Voraus

+0

Die erste ist JaggedArray und die zweite ist 2D-Array. Suchen Sie nun nach diesen Namen. – UsmanAzam

+0

Lesen Sie http://stackoverflow.com/questions/4648914/why-we-have-both-jagged-array-and-multiimental-array – UsmanAzam

+0

danke. es war hilfreich – user1700961

Antwort

11

double[][] ist zackig. Es ist buchstäblich eine Anordnung von Arrays.

double[,] ist multidimensional. Es wird spezielle Compiler-Behandlung.

Sie haben unterschiedliche Speicherlayouts. double[][] ist ein Array, das Referenzen zu den anderen Arrays enthält, während double[,] zur einfacheren Verwendung eindimensional ausgelegt ist.

Ein weiterer Unterschied ist, welche Daten sie halten können. Ein verzweigtes Array kann wie folgt sein:

1231243245345345345345 
23423423423423 
2342342343r234234234234234234 
23423 

Während ein mehrdimensionales Array hat eine perfekte Tisch sein, wie folgt aus:

34534534534534 
34534534534533 
34534534534534 
34534534534545 

Ein Weg, um es auf NULL festlegbare int s zu verwenden wäre.

Nun lösen Ihr Problem:

ändern Sie Ihre Methodensignatur zu public void verifymarks(double[,] marks) und bei dem Verfahren etwas ändern, die marks[x][y]-marks[x,y] verwendet.

+1

Können Sie auf den "bekommt spezielle Compiler-Behandlung" Teil erweitern? Hört sich interessant an. – Gray

+0

@Gray Ich werde versuchen, aber die bessere Person zu fragen, ist Eric Lippert. –

4

double[][] heißt Jagged array. Es ist ein Array Array (genauso wie Sie eine Liste von Listen erstellen können). Mit dieser Struktur können Sie für jedes Unterfeld eine andere Größe angeben.

z.Bsp:

double[][] jaggedArray = new double[2][]; 
jaggedArray[0] = new double[5]; 
jaggedArray[1] = new double[151]; 

Die andere Schreib double[,] ist ein 2D-Array (Multidimensional array im Allgemeinen). Sie können es als Tabelle sehen.

Eine sehr praktische Funktion von mehrdimensionalen Arrays ist die Initialisierung:

string[,] test = new string[3, 2] { { "one", "two" }, 
            { "three", "four" }, 
            { "five", "six" } }; 
+0

Wenn beide Array sind, warum kann ich nicht Jaggedarray verwenden [5] [1] = multidimarray [5,1] – user1700961

+0

wenn 'jaggearray' und' multidimarray' den gleichen Datentyp enthält sollte es funktionieren. –

+0

ich versuchte doppelt [] [] jaggedarray = neu double [27] []; für (int j = 0; j <20; j ++) { gezackte Matrix [j] [0] = Werte [j, 0]; jaggedarray [j] [1] = Werte [j, 3]; } _aber es hat nicht funktioniert_ beide sind doppelt – user1700961

2

Hier ist eine visuelle, von Dump() Funktion des LINQPad.

enter image description here

Die erste ist die double[,], die eine Matrix bildet. Die zweite ist double[][], die nur ein Array von Arrays ist.