Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem c#- Změna velikosti 2D pole

Zdravím,

potřeboval bych poradit, jak zvětšit 2D pole? V 1D mi to funguje bez problémů viz.:

System.Array.Resize(ref pole, ruleta_vybrana_cisla.Length + 1);

Ale pro 2D pole to nefunguje, díky moc za radu ;)

Předmět Autor Datum
Napr. nepouzivat 2d ale 1d a indexy si preratavat sam. (druha moznost by bolo len dynamicka tabulka…
MM.. 18.05.2013 15:42
MM..
1D pole zrovna moc nechci, protože potřebuju sloupce a řádky čísel ;)
Bayerus 18.05.2013 15:43
Bayerus
1d pole je uplne stejna vec jak 2d pole. Mas problem s vynasobenim indexu ci co?
MM.. 18.05.2013 15:44
MM..
Jak to přesně myslíš ? ... nějaký příklad bys mohl ukázat ?
Bayerus 18.05.2013 15:49
Bayerus
pole[i,j] je to same co pole[i*sirka+j] ked chces zvysit len vysku tak nemas problem pridas na koni…
MM.. 18.05.2013 15:56
MM..
No, mám int pole[,] = new int[cislo ktere chci menit, 6 (stale cislo nemenne)].
Bayerus 18.05.2013 16:16
Bayerus
Tak si to mozes urobit ako jednorozmerne pole[6*neco] a pristupovat na to pomocou pole[6*i+j] kde i… poslední
MM.. 18.05.2013 16:19
MM..
Napr. ked si das do google two dimensional array resize tak najdes napr. nejakych nestastnikov co vy…
MM.. 18.05.2013 16:02
MM..

pole[i,j] je to same co pole[i*sirka+j]

ked chces zvysit len vysku tak nemas problem pridas na koniec "sirka" pocet prvkov. Ked ale chces zvysovat aj sirku pola tak problem mas ptz musis kopirovat kazdy riadok na ine pozicie v poli. Preto ti zrejme ani trrieda array neponuka zvacsenie viacrozmerneho pola.
Bez kopirovania to ide len tak ze nepouzijes 2rozmerne pole ale iny sposob ukladania dat, pomocou odkazov na ine pamatove miesta (t.j. napr. pole poli, alebo nejake zoznamy apod)

Tak si to mozes urobit ako jednorozmerne pole[6*neco] a pristupovat na to pomocou pole[6*i+j] kde i sa moze menit od 0 po neco-1, a j sa moze menit od 0 po 5.
Potom zvacsujes to pole o nasobky 6, t.j. napr. ak chces ten rozmer neco zvysit o 10, tak zvysis to pole o 6*10 prvkov.

Zvacsit jeden rozmer ti mozno dovoli aj u 2D pola ta funkcia Array.Resize, ale neviem ze ktory parameter by to zvacsovalo, radsej by som si to robil sam tym 1rozmernym polom.

Napr. ked si das do google two dimensional array resize tak najdes napr. nejakych nestastnikov co vytvoria nove vacsie pole a kopiruju riadky manualne napr.
http://stackoverflow.com/questions/6539571/how-to- resize-multidimensional-2d-array-in-c
(to prve je zle, potom neskor v niektorej odpovedi tam by to malo byt dobre).

Ale principialne ak chces nieco dynamicky zvacsovat tak je nezmyselne pouzivat 2D pole, kvoli tomu zbytocnemu kopirovaniu, slusne rozmyslajuci clovek skor pouzije nejaky iny sposob ukladania dat v ktorom sa pouzivaju odkazy.
Ak ti nevadi to kopirovanie (napr. ak to nezvacsujes casto a nemas vela dat) tak si to kludne nechaj v 2D poli a kopiruj, ked mas malo dat a nerobis to v programe casto tak je to jedno.

Zpět do poradny Odpovědět na původní otázku Nahoru