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
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
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]);
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
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
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
dzieki