Tablica wielowymiarowa [] [] vs [,] [duplikat]
double[][] ServicePoint = new double[10][9]; // <-- gives an error (1)
double[,] ServicePoint = new double[10,9]; // <-- ok (2)
Jaka jest ich różnica? (1) jaki jest powód błędu?
I
double d = new double[9]
ServicePoint[0] = d;
Za pomocą (2) wyświetli monit o błąd. Dlaczego?
5 answers
Jeden jest tablicą tablic, a drugi jest tablicą 2d. Pierwszy może być postrzępiony, drugi jest jednolity.
Czyli double[][]
może być:
double[][] x = new double[5][];
x[0] = new double[10];
x[1] = new double[5];
x[2] = new double[3];
x[3] = new double[100];
x[4] = new double[1];
Ponieważ każdy wpis w tablicy jest odniesieniem do tablicy double
. Z postrzępioną tablicą możesz wykonać przypisanie do tablicy tak, jak chcesz w drugim przykładzie:
x[0] = new double[13];
Na drugim elemencie, ponieważ jest to jednolita tablica 2d, nie możesz przypisać tablicy 1d do wiersza lub kolumny, ponieważ musisz indeksować zarówno wiersz, jak i kolumna, która sprowadza cię do jednego double
:
double[,] ServicePoint = new double[10,9];
ServicePoint[0]... // <-- meaningless, a 2d array can't use just one index.
UPDATE :
Aby wyjaśnić na podstawie Twojego pytania, powodem, dla którego twój #1 miał błąd składni, jest to, że miałeś to:
double[][] ServicePoint = new double[10][9];
I nie można określić drugiego indeksu w momencie budowy. Kluczem Jest to, że ServicePoint jest Nie tablicą 2d, ale tablicą 1D (tablic) i dlatego ponieważ tworzysz tablicę 1D (tablic), podajesz tylko jeden indeks:
double[][] ServicePoint = new double[10][];
Wtedy, gdy tworzysz każda pozycja w tablicy, każda z nich jest również tablicami, więc wtedy można określić ich wymiary (które mogą być różne, stąd określenie jagged array):
ServicePoint[0] = new double[13];
ServicePoint[1] = new double[20];
Mam nadzieję, że to pomoże!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 14:50:33
W pierwszym przypadku próbujesz utworzyć coś, co nazywa się postrzępioną tablicą.
double[][] ServicePoint = new double[10][9].
Powyższe stwierdzenie zadziałałoby, gdyby zostało zdefiniowane jak poniżej.
double[][] ServicePoint = new double[10][]
Oznacza to, że tworzysz tablicę o rozmiarze 10, która może przechowywać w niej 10 tablic różnej wielkości it.In proste terminy tablica tablic.zobacz poniższy obrazek, który oznacza postrzępione / align = "left" /
Http://msdn.microsoft.com/en-us/library/2s05feca (v=vs.80). aspx
Druga jest w zasadzie dwuwymiarową tablicą, a składnia jest poprawna i akceptowalna.
double[,] ServicePoint = new double[10,9];//<-ok (2)
I aby uzyskać dostęp lub zmodyfikować tablicę dwuwymiarową, musisz przekazać oba wymiary, ale w Twoim przypadku przekazujesz tylko jeden wymiar, dlatego błąd
Poprawne użycie to
ServicePoint[0][2]
,odnosi się do elementu w pierwszym rzędzie, trzecim kolumna.
Obrazowy obraz twojej dwuwymiarowej tablicy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 14:53:54
double[][]
są nazywane postrzępione tablice , Wymiary wewnętrzne nie są określone w deklaracji. W przeciwieństwie do tablica prostokątna, każda tablica wewnętrzna może mieć dowolną długość. Każda tablica wewnętrzna jest domyślnie inicjowana na wartość null, a nie pustą. każda tablica wewnętrzna musi być utworzona ręcznie: Reference [C# 4.0 in nutshell the definitive Reference]
for (int i = 0; i < matrix.Length; i++)
{
matrix[i] = new int [3]; // Create inner array
for (int j = 0; j < matrix[i].Length; j++)
matrix[i][j] = i * 3 + j;
}
double[,]
są wywoływane rectangular arrays
, które są deklarowane za pomocą przecinków do oddzielenia każdego wymiar. Poniższy fragment kodu deklaruje prostokątną dwuwymiarową tablicę 3 na 3, inicjalizując ją liczbami od 0 do 8:
int [,] matrix = new int [3, 3];
for (int i = 0; i < matrix.GetLength(0); i++)
for (int j = 0; j < matrix.GetLength(1); j++)
matrix [i, j] = i * 3 + j;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 20:07:58
double[,]
jest tablicą 2d (macierz) natomiast {[2] } jest tablicą tablic ( ) i składnia jest następująca:
double[][] ServicePoint = new double[10][];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-20 19:01:11
double[][]
jest tablicą tablic i double[,]
jest macierzą. Jeśli chcesz zainicjalizować tablicę array, musisz to zrobić:
double[][] ServicePoint = new double[10][]
for(var i=0;i<ServicePoint.Length;i++)
ServicePoint[i] = new double[9];
Weź pod uwagę, że użycie tablic tablic pozwoli Ci mieć tablice o różnej długości:
ServicePoint[0] = new double[10];
ServicePoint[1] = new double[3];
ServicePoint[2] = new double[5];
//and so on...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 14:49:24