Thread View: alt.pl.comp.lang.csharp
6 messages
6 total messages
Started by rozrabiak
Sun, 11 Apr 2004 14:57
tablica dynamiczna :)
Author: rozrabiak
Date: Sun, 11 Apr 2004 14:57
Date: Sun, 11 Apr 2004 14:57
9 lines
1066 bytes
1066 bytes
Witam W jaki sposob moge zadeklarowac w C# tablice dynamiczna? W Delphi robilem to tak: var mojaTab: Array of integer; i mialem tablice, ktora nie miala "wielkosci". Jak to uzyskac w C# ? Nie wiem ile elementow bede potrzebowal wstawic do tablicy. Pozdrawiam, grzes.
Re: tablica dynamiczna :)
Author: rozrabiak
Date: Sun, 11 Apr 2004 15:33
Date: Sun, 11 Apr 2004 15:33
12 lines
1232 bytes
1232 bytes
Uz.ytkownik rozrabiak napisa?: > Witam > W jaki sposob moge zadeklarowac w C# tablice dynamiczna? > W Delphi robilem to tak: var mojaTab: Array of integer; > i mialem tablice, ktora nie miala "wielkosci". > > Jak to uzyskac w C# ? Nie wiem ile elementow bede potrzebowal wstawic do > tablicy. > > Pozdrawiam, grzes. Odpowiedz': ArrayList ;)
Re: tablica dynamiczna :)
Author: Marek Janaszewski USUNTO. z adre...
Date: Mon, 12 Apr 2004 12:13
Date: Mon, 12 Apr 2004 12:13
40 lines
2293 bytes
2293 bytes
rozrabiak wrote:
> Uz.ytkownik rozrabiak napisa?:
>> Witam
>> W jaki sposob moge zadeklarowac w C# tablice dynamiczna?
>> W Delphi robilem to tak: var mojaTab: Array of integer;
>> i mialem tablice, ktora nie miala "wielkosci".
>>
>> Jak to uzyskac w C# ? Nie wiem ile elementow bede potrzebowal
>> wstawic do tablicy.
>>
>> Pozdrawiam, grzes.
>
> Odpowiedz': ArrayList ;)
Witam!
ArrayList to raczej odpowiednik TList czyli rodzaj kolekcji, przy Garbace
Collectorze nie specjalnej składni dla tablic dynamicznych jak w Delphi. W
Delphi oczywiście także można było zakładać tablice dynamiczne w tradycyjny
sposób tylko nie są to zmienne o kontrolowanym czasie życia. W C# tablice
tak się nie przechowuje na stosie więc wszystkie są dynamiczne, może poza
stałymi tablicowymi.
Deklaracja tablicy wygląda np. tak:
// Tablica na 100 liczb, indeks od 0 do 99:
int[] liczby = new int[100];
int[] StalaTablica = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Wydaje mi się, że w tym drugim tablica nie jest przydzielona ani dynamicznie
na stercie, ani na stosie tylko znajduje się w kodzie programu. Na stosie
znajduje się tylko referencja do niej.
P.S. W Polsce wiadomości powinno się kodować za pomocą ISO-8859-2
--
Pozdrawiam,
Marek Janaszewski
[ j_m...@gazeta.pl ]
Re: tablica dynamiczna :)
Author: rozrabiak
Date: Mon, 12 Apr 2004 12:36
Date: Mon, 12 Apr 2004 12:36
24 lines
1821 bytes
1821 bytes
Użytkownik Marek Janaszewski (USUN_TO. z adresu!) napisał:
> // Tablica na 100 liczb, indeks od 0 do 99:
> int[] liczby = new int[100];
>
No dobrze, a jak dodawac nowe indeksy do tej tablicy?
Np: w czasie pracy programu okaze sie, ze 100 elementow to za malo i
trzeba bedzie dodac 10. W Delphi uzywalem
SetLength(obiekt,Length(obiekt)+10) i mialem 10 elementow wiecej, a jak
to zrobic w C# ?
> int[] StalaTablica = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Takie deklarowanie odpada w moim przypadku.
> Wydaje mi się, że w tym drugim tablica nie jest przydzielona ani dynamicznie
> na stercie, ani na stosie tylko znajduje się w kodzie programu. Na stosie
> znajduje się tylko referencja do niej.
>
> P.S. W Polsce wiadomości powinno się kodować za pomocą ISO-8859-2
Sprawdziłem w ustawienia kuriera - mam ISO-8859-2. Dlaczego jest
inaczej - nie wiem.
Re: tablica dynamiczna :)
Author: Aptu
Date: Mon, 12 Apr 2004 19:59
Date: Mon, 12 Apr 2004 19:59
16 lines
1621 bytes
1621 bytes
W wiadomości <c5e2hk$gee$1...@news.onet.pl> rozrabiak <br...@maila.pl> napisał(a): > No dobrze, a jak dodawac nowe indeksy do tej tablicy? > Np: w czasie pracy programu okaze sie, ze 100 elementow to za malo i > trzeba bedzie dodac 10. W Delphi uzywalem > SetLength(obiekt,Length(obiekt)+10) i mialem 10 elementow wiecej, a > jak to zrobic w C# ? Odpowiedź której sam udzieliłeś jest prawidłowa, może w Delphi można to zrobić inaczej ale w C# za dynamiczne tablice robią właśnie kolekcje. -- Email: aptu(at)maZapolis.pl zamień 'z' na 'g' JabberID: aptu(at)chrome.pl -----------------
Re: tablica dynamiczna :)
Author: Marek Janaszewski USUNTO. z adre...
Date: Mon, 12 Apr 2004 20:31
Date: Mon, 12 Apr 2004 20:31
47 lines
3407 bytes
3407 bytes
Aptu wrote: > W wiadomości <c5e2hk$gee$1...@news.onet.pl> > rozrabiak <br...@maila.pl> napisał(a): > >> No dobrze, a jak dodawac nowe indeksy do tej tablicy? >> Np: w czasie pracy programu okaze sie, ze 100 elementow to za malo i >> trzeba bedzie dodac 10. W Delphi uzywalem >> SetLength(obiekt,Length(obiekt)+10) i mialem 10 elementow wiecej, a >> jak to zrobic w C# ? > > Odpowiedź której sam udzieliłeś jest prawidłowa, może w Delphi można > to zrobić inaczej ale w C# za dynamiczne tablice robią właśnie > kolekcje. Witam! Tak tylko sposób alokacji takich danych jest zupełnie inny. Trochę głupio mieć do danych prymitywnych takich jak int, double, itd w pamięci tablice wskaźników (chyba coś takiego w C++ nazywane jest wektorem) a te dane przydzielone dynamicznie. Zamiast tego tablica to spójny obszaru pamięci. Tablica to tablica, elementy są organizowane przez sąsiedztwo. Ma to swoje zalety i wady. Wady w operowaniu, zalety w spójności, oszczędności i łatwej możliwości przejścia do n-tego elementu. Do obiektów kolekcje nadają się znakomicie, no ale w tym celu opakowywać typ całkowite i zmiennoprzecinkowe to może okazać się przesadą. W C# pozostawiono struktury i typy prymitywne właśnie ze względu na wydajność. Co do zmiany wielkości to trzeba zrobić to w taki sposób w jaki wykonało by to Delphi. Założyć tablice o nowej wielkości i przepisać do niej wszystkie dotychczasowe elementy. Aby nie dokonywać tego zbyt często warto dodawać elementy w jakiś paczkach. Rozwiązuje się to przechowując pojemność tablicy i ilość elementów osobno. Jeśli rozmiar próbuje przekroczyć pojemność realokacja jest wykonywana. Tak działa w Delphi TList. Dodatkowo przyrost elementów jest wyznaczany na podstawie wielkości tablicy. Im więcej elementów tablica tym w większych kęsach warto aby się rozrastała. Jak działa SetLength pod tym względem to nie wiem. Jeśli do C# jest dostępne narzędzie do optymalizacji kodu to można coś takiego poprosić o sprawdzenie naszego kodu. Jeśli nieopatrznie powodujemy gdzieś działania kończone się masowym wywoływaniem menadżera pamięci, to powinno coś takiego wyjść. Np. w jakieś pętli są dodawane elementy zawsze na początek. -- Pozdrawiam, Marek Janaszewski [ j_m...@gazeta.pl ]
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads