wyliczenie wielowymiarowej tablicy obiektów

0

Mam jakas taka tablice Obiekty[int x,int y]
obiekty te generuja sie dynamicnie podczas dzialania kodu
i nie znam koncowych indeksow tej tablicy (przy czym tablica nie jest symetryczna znaczy sie jak jest obiekt o indeksie [1,5] to wcale nie musi byc obiektu [2,5] natomiast moze byc obiekt z indeksem [10,6])
teraz chcialbym sobie to zapisywac do pliku
i nie zabardzo wiem jak to wyliczyc jesli z Xem indeksem nie bede mial wiekszego problemu (bo wiem gdzie odczytac ostatni [a leca one po kolei])to mam problem z Y
moze foreach tylko nie wiem jak dla tablic wielowymiarowych na foreach sie robi petle

0

Kazda tablica ma wlasciwosc Length, nie musisz wiec niczego zapamietywac.

Np.

int [][] tab = new int [15][];
for (int i=0 ; i<15; i++)
	tab[i] = new int [i];
Console.WriteLine(tab[2].Length);

da w wyniku 2.

pozdrawiam
johny

0

Dzieki
ale jeszcze jak sie odniesc do takiej struktury [,] bo na tej[][] jest ok
poza tym widze ze to leci od 0 do size u mnie size [32,32] ale indeksy zwykle nie przekraczaja 10

 Panel[,] DDD= new Panel[32,32];

                for (int j = 0; j < DDD.Length ;j++ )
                {
                    MessageBox.Show(Convert.ToString(DDD.Length) + "  " + Convert.ToString(j));


                }

ten przyklad wyswietli 1024 msg
a chcialbym zeby dostac tylko dla tych elementow ktore naprawde zostaly utworzone

this.DDD[i,j] = new Panel();
this.Controls.Add(this.DDD[i,j]);

0

Przyznam sie, ze pierwszy raz widze taki sposob deklaracji tablicy. No, ale jesli tak jest latwiej, to wymiar tablicy mozesz zdobyc tak:

	String [,] DDD= new String[32,31];
	Console.WriteLine(DDD.GetLength(0)+"");
	Console.WriteLine(DDD.GetLength(1)+"");

I nie rozumiem co znaczy

ten przyklad wyswietli 1024 msg
a chcialbym zeby dostac tylko dla tych elementow ktore naprawde zostaly utworzone

'naprawde utworzone' ?

pozdrawiam
johny

0

juz tlumacz na [przykladzie o co chodzi

Panel[,] DDD= new Panel[32,32]; 
//  Nowa tablica paneli w ktorej przewidziane jest miejsce na 1024 elementy


void buduj()
{
this.DDD[0,0] = new Panel();
this.Controls.Add(this.DDD[0,0]);
this.DDD[0,1] = new Panel();
this.Controls.Add(this.DDD[0,1]);
this.DDD[0,2] = new Panel();
this.Controls.Add(this.DDD[0,2]);

this.DDD[1,0] = new Panel();
this.Controls.Add(this.DDD[1,0]);
this.DDD[1,1] = new Panel();
this.Controls.Add(this.DDD[1,1]);

this.DDD[2,0] = new Panel();
this.Controls.Add(this.DDD[2,0]);
this.DDD[2,1] = new Panel();
this.Controls.Add(this.DDD[2,1]);
this.DDD[2,2] = new Panel();
this.Controls.Add(this.DDD[2,2]);
this.DDD[2,3] = new Panel();
this.Controls.Add(this.DDD[2,3]);
}

W sumie powstalo w tablicy 9 paneli (u mnie panele generuja sie dynamicznie i nie wiem wlasnie ile ich jest i jakie maja indeksy (znam tylko pierwszy indeks czyli w tym przykladzie bede wiedzial ze mam pierwsze indeksy od 0 do 2))

chodzi mi o to ze chcialbym z tych dziewięciu paneli odczytac sobie wlasciwosci

.Length czy .GetLength() zwracaja mi zadeklarowany rozmiar tablicy czyli 32,32 lub 1024
po co mam zczytywac wlasciwosc 1024 elementow kiedy mam tylko 9

myslalem ze znajde jakis sposob ktory mi powie ze ostatni indeks dla DDD[2,] to 3 a dla DDD[1,] to 1
i dla DDD[0,] to 2

0

W takim wypadku bedziesz musial po prostu przeleciec tablice z uwagi na warunek != null. Tablica w c# to tablica referencji i nie zapamietuje, ktore referencje zostaly zmienione, a ktore nie. Ten sposob jednak jest malo optymalny - lepiej bedzie przy tworzeniu zapamietywac najwyzszy dodany indeks.

pozdrawiam
johny

0

dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1