CentrumXP.pl » Witamy
CentrumXP.pl
 
22 października 2009 - Premiera Microsoft Windows 7 - dowiedź się więcej w Portalu CentrumXP.pl...
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy byłbyś zainteresowany mobilną wersją Portalu CentrumXP.mobi dla komórek?

CentrumXP.pl » Microsoft .NET » Kurs C#, cz. I » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

16. Kolekcje

Autor: Daniel Celeda    Opublikowano: 23 maja 2006    Odsłon: 102250    »Skomentuj...
Strona 1 z 2  Następna»
Zobacz również:

01. "Programowanie" - z czym to się je?

02. Programowanie obiektowe

03. Do czego potrzebne jest nam Visual Studio 2005

04. Konfiguracja i obsługa C# 2005 Express Edition

05. Tworzenie solution i nowych projektów

06. Klasy i obiekty

07. Tworzenie oraz inicjalizacja obiektów

08. Operatory arytmetyczne

09. Porozmawiajmy o „stringach”

10. Typy proste i referencyjne

11. Wartości logiczne

12. Inne operatory logiczne

13. Instrukcje iteracyjne (tzw. pętle) - cz. I

14. Instrukcje iteracyjne (tzw. pętle) - cz. II

15. Tablice

17. Typy generyczne (generics)

18. Przestrzenie nazw (namespaces)

19. Modyfikatory dostępu

20. Metody statyczne oraz metody instancyjne

»Uzyskaj pomoc na forum

Wiemy już do czego służą tablice. Czas poznać ich bliskich znajomych – kolekcje. Przestrzenią nazw, której będziemy musieli użyć jest „System.Collections”. Najbardziej znaną i najczęściej stosowaną kolekcją jest „ArrayList”. Jest to lista, w której tak jak w tablicy możemy przechowywać wiele elementów, jednak jest łatwiejsza w obsłudze.

Czemu więc używać zwykłych tablic?

Mają one kilka zalet, których nie posiada „ArrayList”.
Po pierwsze, podczas deklarowania tablicy określamy jakiego typu będą elementy w niej przechowywane. Dzięki tej deklaracji unikamy błędów już na etapie kompilacji polegających na dodawaniu do tablicy elementu o innym typie niż się spodziewaliśmy (kompilator wygeneruje błąd). Dodatkowo tablice działają szybciej niż „ArrayList”.

Kiedy więc używać kolekcji?

Kolekcje dają nam większa swobodę kosztem wydajności. Nie musimy ustalać rozmiaru listy tak jak to się robi w tablicach. Po prostu dodajemy bądź usuwamy kolejne elementy. „ArrayList” posiada wiele metod, które upraszczają jej obsługę oraz udostępniają dodatkową funkcjonalność. W poprzednim ćwiczeniu tworzyliśmy tablicę wypełnioną liczbami a następnie sortowaliśmy je. Używając „ArrayListy” sortować możemy za pomocą metody „Sort()”. Elementy dodajemy do kolekcji wykonując metodę „Add()”. W tym momencie kolekcja dodaje referencję do tego elementu traktując go jak obiekt klasy „object”.

using System;
using System.Collections;
 
namespace Kolekcje
{
class Program
{
static void Main(string[] args)
{
ArrayList lista = new ArrayList();
lista.Add(2);
lista.Add(11);
lista.Add(-2);
lista.Add(4);
 
Console.Write("Elementy nieposortowane: ");
for (int i = 0; i < 4; i++)
{
Console.Write(lista[i] + " ");
}
 
lista.Sort();
Console.Write("\nElementy posortowane: ");
for (int i = 0; i < 4; i++)
{
Console.Write(lista[i] + " ");
}
 
 
Console.ReadKey();
}
}

Wynik:

W następnym programie spróbujemy na liście umieścić elementy będące instancjami klasy, którą sami stworzymy.
Najpierw napiszmy program, w którym umieścimy dwa obiekty naszej klasy pomocniczej na liście, a następnie spróbujemy pobrać te elementy i bez rzutowania dostać się do zmiennej „Liczba”.

using System;
using System.Collections;
 
namespace Kolekcje
{
class Element
{
public int Liczba;
 
public Element(int liczba)
{
this.Liczba = liczba;
}
}
 
class Program
{
static void Main(string[] args)
{
Element element_1 = new Element(10);
Element element_2 = new Element(20);
 
ArrayList lista = new ArrayList();
 
lista.Add(element_1);
lista.Add(element_2);
 
int nowaZmienna = lista[0].Liczba;
 
Console.ReadKey();
}
}
}

Powyższy program nie skompiluje się, ponieważ po pobraniu elementu z listy nie zrzutowaliśmy go na typ „KlasaPomocnicza”. Element więc jest traktowany jako instancja klasy „object”, która nie posiada zmiennej „Liczba”.

Error 1 'object' does not contain a definition for 'Liczba'

Poniżej poprawnie działający program, wykonujący rzutowanie.

using System;
using System.Collections;
 
namespace Kolekcje
{
class Element
{
public int Liczba;
 
public Element(int liczba)
{
this.Liczba = liczba;
}
}
 
class Program
{
static void Main(string[] args)
{
Element element_1 = new Element(10);
Element element_2 = new Element(20);
 
ArrayList lista = new ArrayList();
 
lista.Add(element_1);
lista.Add(element_2);
 
int nowaZmienna = ((Element)lista[0]).Liczba;
 
Console.ReadKey();
}
}
}


1 2 Dalej» 

Aktualna ocena to: 2.60

Oceń artykuł...
Porażka Kiepski Taki Sobie Dobry Super!


Tagi:  

A teraz:    Dodaj do ulubionych Dodaj do ulubionych    Wydrukuj Wydrukuj    Wyślij link znajomemu Wyślij link znajomemu    Skomentuj Skomentuj

Komentarze do 16. Kolekcje

Dodaj komentarz»

Shreeve 27 lipca 2006, 9:09

Przydałby się jakiś porządny opis najczęściej używanych kolekcji z praktycznymi przykładami. Porządny, mam na myśli, taki jak w tym przypadku ArrayList

kostii 24 sierpnia 2006, 14:05

Troche zamotane :( class Program { static void Main(string["> args) { Element element_1 = new Element(10); Element element_2 = new Element(20); ArrayList lista = new ArrayList(); lista.Add(element_1); lista.Add(element_2); int nowaZmienna = ((Element)lista[0">).Liczba; Console.ReadKey(); } }

phoobosss 3 września 2006, 15:53

Myślę, że za szybko i niedokładnie wytłumaczyłeś to rzutowanie. Jak to ma być kurs dla początkujących to zdecydowanie źle ci to wyszło !!!

. 18 czerwca 2007, 16:21

Dlaczego autor nie uzywa wciec?

bob_best 27 lipca 2007, 12:42

poprzednie 15 dzialow bylo napisane calkiem jasno i przejrzyscie, ale tu sie troche pogubilem, za malo napisales o tym rzutowaniu i dla poczatkujacych to nie starcza :/

Karolus 4 listopada 2007, 9:47

Czemu tu nie ma tabulatorów ????

Kot-ek 19 listopada 2007, 11:11

"public Element(int liczba) { this.Liczba = liczba; }" A nie jest przypadkiem tak, że C# odróżnia małe litery od dużych... po co w takim razie słówko this? Nie powinno być: "Liczba = liczba;" w konstruktorze klasy?

Kot-ek 19 listopada 2007, 11:20

W początkowych rozdziałach kursu ktoś nad nim czuwał: dodawał przecinki na czerwono, komentarze podpisane literką J... a gdzie ta osoba jest teraz? Czytając pierwszy raz w ogóle nie zrozumiałem o co chodzi w zdaniu: "Napiszmy teraz program, w którym przechowywać na liście oraz w tablic będziemy obiekty klasy „Element”.". Musiałem się na dłużej zatrzymać, żeby zrozumieć "co poeta miał na myśli"... chyba takie zdanie: Napiszmy teraz program, w którym przechowywać będziemy na liście oraz w tablicy obiekty klasy „Element”

michalos 23 listopada 2007, 22:32

Może wiecie jak się przeciąża operatory w C#??? BO po co mi sort skoro nie moge przeciążyć

riiich 19 grudnia 2007, 1:17

zamiast: *** for (int i = 0; i < 4; i++) *** lepszym rozwiązaniem byłoby wykorzystanie własności: Count z klasy ArrayList, zwracającej (int) liczbę przechowywanych elementów czyli: *** for (int i = 0; i < lista.Count; i++) *** Aby w przypadku większej liczby elementów nie zastanawiać się nad ilością przechowywanych elementów w liście.

HideYoshi 17 stycznia 2008, 17:52

hm bardzo pieknie wszystko wytlumaczone, az o momentu KOLEKCJI, czyli rozdzialu 16... tragedia... ; napiszemy program ... ale on sie ni wykona; napiszmy program ale ten tez sie nie wykona; napiszmy program i ten sie wykona ... troche to dziwne bo powinno chyba odrazu sie kogos uczyc robic program dobrze, bo tak mozna przyswoic zla wiedze ;-)

graf 21 lutego 2008, 3:09

Yoshi nie da nauczyć kogoś pisać żeby nie robić błędów trzeba się z nimi oswajać i wiedzieć gdzie szukać rozwiązania... skoro nie zrozumiałeś rzutowania przeczytaj jeszcze raz.

Tomaszs 8 marca 2008, 14:57

+ Świetny kurs, przystępnie napisane przykłady - Podział na strony troche utrudnia czytanie --- www.polishwords.com.pl

slimaq 13 czerwca 2008, 2:42

nie rozumiecie kolekcji, bo nie macie podstaw z innych języków... nie zrozumiecie dobrodziejstw c# bez poznania np.c++ i standard template library... bez asemblera nie zrozumiecie dokladnie jak to wszystko dziala... ale jak chociaz troche lizniecie to moze kiedys wezmiecie sie i za te prawdziw e podstawy

camillos 8 lipca 2008, 10:42

@slimaq: Zgadzam sie że nie znając C++, bedzie wam cięszko zrozumieć kolekcji, ale po co komu tu jest potrzebny asembler? Ja go nie znam i jakoś rozumie to:P

losiu99 6 sierpnia 2008, 17:01

Bez C++ to niekoniecznie... Kolekcje są w C++, w C# i w wielu innych językach, tu nie chodzi o implementację w konkretnym języku, ale raczej pewne minimalne choćby doświadczenie w programowaniu. Do Hello World nie trzeba kolekcji. Zrozumieć można je, kiedy okazują się przydatne przy programowaniu czegoś tam i się je wykorzystuje. Niezależnie od języka. Natomiast co do asma - "jak to wszystko działa", wszystko, nie konkretnie kolekcje. Ale oczywiście asm (na szczęście?) nie jest konieczny do programowania i bez jego znajomości można sobie bez problemu dać radę z niemal wszystkim. Oczywiście to tylko moja subiektywna, swobodnie wyrażona, z pewnością nie pozbawiona błędnych podstaw, opinia. Pozdrawiam.

Piotrek 25 września 2008, 9:46

Fajny kurs i wogóle, ale żeby usunąć 2 element listy powinno chyba być RemoveAt(1) bo zaczyna się indeks od zera?

Push-up 14 października 2008, 15:04

No z tym asemblerem to troche przesada, nie musisz wiedziec dokaldnie jak dziala skrzynia biegow zeby przezucic bieg. Srodowiska takie jak .NET (C#) czy Java powstaly zeby nie trzeba bylo sie "babrac" w asemblera aczkolwiek tytulem rozszerzania swojej wiedzy i poznawania podstaw programowania uwazam, ze warto chociaz poczytac o co w asm chodzi aczkolwiek troche nijak sie to ma do programowania obiektowego. C++ znam calkiem niezle mysle wobec czego nie mam problemu z poznawaniem C# ale bez doswiadczenia ciezko jest przez ten rozdzial przerbnac, z drugiej strony kolekcje (czy tez listy) to w ogole temat, ktory dla poczatkujacego nie bedzie prosty. Na pocieszenie dodam, ze w C++ jest i tak duuuzo trudniej :)

hubapiet 26 października 2008, 23:14

ale tylko wiedząc jak skrzynia działa zrobisz ruch optymalnie! Jak poznacie asma - inne języki będziecie nie tyle rozumieć, co je "widzieć". Jak wiesz jak to działa to łatwiej rozwiązujesz nietypowe problemy. Bo co innego zrozumieć kurs a co innego rozwiązywać problemy laików któzy każą Ci napisać soft "ale Panie, żeby to robiło tak-a-tak!"
Co nie, Slimaq?
 
Count() - nawiasy! To jest funkcja.

jahara 8 stycznia 2009, 19:26

??? w C++ nie ma kolekcji! jest tylko stos/sterta/kolejka z STL(bibl. standarddowej) - C# łączy to wszystko w nieprzenośnym języku, ale jest to przyjemne i zrozumiałe. W sumioe znajomość C++ (lub czegoś innego) jest wymagana aby zrozumieć zaawansowane konstrukcje(tzn. za pierwszym razem) - nieoznacza to że C# jest trudniejszy od C++ - wręcz przeciwnie. Poza tym: KOGO TAK PORĄBAŁO ABY TWIERDZIĆ ŻE ASMA JEST POTRZEBNY? Do rozwiązywania problemów uzywa się logiki...

borcha 24 marca 2009, 21:32

lista.Sort();  wszystko fajnie jezeli w kolekcji masz wartosci int, co sie stanie jesli tam sa obiekty klasy z jedna zmienna tez typu int:)

camileq 7 maja 2009, 22:54

Jak ktoś ma problem z rzutowaniem to mimo wszystko proponuję przerobić tą lekcję do końca, przerobić 17 (typy generyczne) i wrócić do kolekcji. Na pewno wiele się wyjaśni.

tomek 6 lipca 2009, 23:07

borcha - wtedy trzeba tworzyc klase implementujaca cos w stylu
Comparable

nie dziaba 21 sierpnia 2009, 13:18

""object" does not contain a definition for "Liczba" and no extension method "Liczba" accepting a first argument of type "object" could be found (are you missing a using directive or an assembly reference?) "
 
uruchamiam pod net#3.0 i oczywiscie jestem laikiem zeby blad samemu naprawic

juz dziaba 21 sierpnia 2009, 13:25

eh
umieszczanie kodu w stylu "ukazal im sie las"
a na nastepnej stronie " ...krzyzy"
spowodowalo to ze powyzszy koment jest juz bez znaczenia :)
na nastepnej stronie jest dzialajacy (chyba program)
 
ogolnie slaby artykul,zamieszany, 3 razy czytam 3 strony i wciaz nie wiem o co chodzi,podzielam zdanie reszty, do tej pory szlo gladko teraz nie wiadomo o co kaman


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2009 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plSklep on-line  |  Komputer w firmie  |  XboxSpot.pl  |  Live Blog  |  Jama MastahaDevelopers.pl