Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Turóczy Attila (MCT, MCP, MCTS) Livesoft Kft. A.NET Framework a gyűjtemény osztályok széles skáláját biztosítja a fejlesztők számára. NévLeírás ArrayListIndex.

Hasonló előadás


Az előadások a következő témára: "Turóczy Attila (MCT, MCP, MCTS) Livesoft Kft. A.NET Framework a gyűjtemény osztályok széles skáláját biztosítja a fejlesztők számára. NévLeírás ArrayListIndex."— Előadás másolata:

1 Turóczy Attila (MCT, MCP, MCTS) Livesoft Kft

2 A.NET Framework a gyűjtemény osztályok széles skáláját biztosítja a fejlesztők számára. NévLeírás ArrayListIndex alapú, dinamikus méretű SortedListRendezett, érték/név párok QueueFIFO tárolás StackLIFO tárolás HashtableÉrték/név párok, kulcs szerinti hozzáférés BitArrayBool értékek gyűjteménye StringCollectionDinamikus string gyűjtemény StringDictionaryMint a Hashtable, kizárólag string párok ListDictionaryKis méretű listák név/érték párok HybridDictionaryHa kicsi, akkor ListDictionary, ha nagy, akkor Hashtable NameValueCollectionNév/érték párok, kulcs alapú hozzáférés, stringeket tárol

3 Alapvető gyűjtemények Soros listák Dictionaryk Speciális gyűjtemények Generikus adatszerkezet

4 Az ArrayList egy egyszerű, nem rendezet konténer, objektumok számára. – Dinamikusan méretű – Objectek tárolása (boxing/unboxing) – Indexelt

5 Elem felvétele: Add(elem) – Csak 1 elem felvétele AddRange(elemek) – Több elem felvétele Az elem bármilyen objektum lehet! Boxing/Unboxing Az AddRange-l bármilyen tömböt átadhatunk (Ami megvalósítja az ICollection interfacet) ArrayList myArray = new ArrayList(); string s = "Hello"; myArray.Add(s); myArray.Add("Hi"); myArray.Add(50); myArray.Add(new object()); string[] anArray = new string[] { "London", "Budapest", "New York" }; myArray.AddRange(anArray);

6 A beszúrást az Insert és az InsertRange metódusok segítségével történhet. Az Insertel egy míg az InsertRangel több elemet szúrhatunk be az ArrayListbe myArray.Insert(3, "BeszurtElem"); String[] beszurtandoElemek = new String[] {"Opera", "Firefox", "IE8"}; myArray.InsertRange(4, beszurandoElemek);

7 Az elemek beszúrása és lekérdezése történhet indexerek segítségével is. //Elem hozzáadása myArray[1] = "Hello"; //Elem lekérdezése Console.WriteLine(myArray[1]); Ha egy olyan indexű helyre akarunk elemet beszúrni, ahol már létezik egy elem, akkor azt felülírja!

8 Elem törlése Remove az adott elemet törli RemoveAt az adott indexű elemet törli RemoveRange (offset, count) egy adott tartományt törölhetünk ki a segítségével. myArray.Remove("IE8"); myArray.RemoveAt(2); myArray.RemoveRange(0, 2); Amennyiben a Remove -nak átadott elem nincs a listában nincs hibaüzenet! Olyan mintha rendesen lefutott volna a művelet!

9 Egyéb hasznos tagfüggvények IndexOf(elem) – Az elem indexét adja vissza. Ha nem találja -1 el tér vissza. Clear() – Töröljük az ArrayList összes elemét Contains(elem) – Megállapíthatjuk, hogy az adott elem benne található-e az ArrayListben. String myString = "My String"; if(myArray.Contains(myString)) { int index = myArray.IndexOf(myString); myArray.RemoveAt(index); } else { myArray.Clear(); }

10 //Létrehozás és elemenként beszúrás ArrayList myArray = new ArrayList(); myArray.Add("Hi"); myArray.Add(3.2); myArray.Add(new object()); //Több elem beszúrása myArray.AddRange(new object[] { "vmi", new ArrayList(), 7 }); //Beszúrás Insert és InsertRange myArray.Insert(3, "Hi again"); myArray.InsertRange(8, new string[] { "egy", "kettő" }); //Eltávolítás Remove, RemoveAt és RemoveRange-el myArray.Remove("Hi again"); myArray.RemoveAt(2); myArray.RemoveRange(0, 3);

11 Az ArrayList megvalósítja az IEnumerable interface-t. IEnumerator enumerator = myArray.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); } foreach (object item in myArray) { Console.WriteLine(item); }

12 Alapvető gyűjtemények Soros listák Dictionaryk Speciális gyűjtemények Generikus adatszerkezet

13 FIFO (First-in, First-out) elvű lista Az elem bármilyen objektum lehet! Boxing/Unboxing Poperty-k Count – A Queue-ban lévő elemek száma Tagfüggvényei Dequeue() – Elem kivétele a Queue-ból, és annak eltávolítása Enqueue() – Elem hozzáadása. (Végére kerül) Peek() – Elem kivétele a Queue-ból DE NEM távolítja el az elemet a Queue-ból!

14 Queue q = new Queue(); //Elem hozzáadása q.Enqueue("1 elem"); //Elem kivétele Console.WriteLine(q.Dequeue()); Queue queue = new Queue(); queue.Enqueue("Első"); queue.Enqueue("Második"); queue.Enqueue("Harmadik"); queue.Enqueue("Negyedik"); while (queue.Count > 0) { Console.WriteLine(queue.Dequeue()); }

15 LIFO (Last-in, First-out) rendszerű lista Az elem bármilyen objektum lehet! Boxing/Unboxing Property-k: Count – A Stackben lévő elemek száma Tagfüggvények: Pop() – A Stack legfelső elemének kivétele, és annak eltávolítása. Push() – Elem hozzáadása. (Stack tetejére kerül) Peek() – A legfelső elem kivétele a Stackből, DE NEM törlődik a Stackből

16 Stack s = new Stack(); //Elem hozzáadása s.Push("1 elem"); //Elem kivétele Console.WriteLine(s.Pop()); Stack stack = new Stack(); stack.Push("Első"); stack.Push("Második"); stack.Push("Harmadik"); stack.Push("Negyedik"); while (stack.Count > 0) { Console.WriteLine(stack.Pop()); }

17 Alapvető gyűjtemények Soros listák Dictionaryk Speciális gyűjtemények Generikus adatszerkezet

18 A Dictionary gyűjtemények Kulcs -> érték pár alapú listák Pl: Hashtable, SortedList, HybridDictionary, OrderedDictionary A Hashtable – Index szintaktikájú hozzáférés – Kulcs alapú hozzáférés – Elem hozzáadása: Add(kulcs, elem) Ht[kulcs] = elem

19 Iteráció foreach-csel: – A hashtábla elemei nem objectek, hanem DictionaryEntry-k!!! – Hozzáférés entry.Value és entry.Key-el Tagfüggvény: – ContainsKey(), ContainsValue() IDictionary Interface – Olyan, mint az IList, csak Hashtáblákra. – Itt az index helyett [”key”]-t használunk – Add(kulcs, ertek), Clear(), Contains(), Remove()

20 Hashtáblában az egyenlőség eldöntése – GetHashCode() (object-től) – Equals() – String GetHashCode() fgv-e felül van definiálva – Teendő: Nekünk is felül kell definiálni az objekutumaink GetHashCode és Equals függvényét

21

22 SortedList – Olyan, mint a Hashtábla, csak kulcs szerint rendez beszúráskor és tud indexelni!!! – Fontosabb metódusok: NévLeírás GetByIndexElem kiolvasása index alapján GetKeyKulcs kiolvasása index alapján GetKeyListKulcsok rendezett listájával tér vissza GetValueListAz értékek listájával tér vissza IndexOfKeyAdott kulcsú elem indexe IndexOfValueElem indexe SetByIndexElem beállítása index alapján

23 ListDictionary – Használata megegyezik a hashtáblával – A felszín alatt egy array lapul – Hashtáblánál nagy az overhead – Hatékonyabb kisebb listáknál HybridDictionary – Kis tábláknál ListDictionary-ként működik, ha az elemszám elég nagy, Hashtáblára migrál. – Akkor érdemes használni ha éles a listák mérete közti különbség (kis listák és nagyon nagy listák)

24 OrderedDictionary – A hashtábláknál gond a rendezés – Van indexelés – Nem csak kulcs alapján tud rendezni(mint a – SortedList) – Olyan, mint a hashtable, csak tud rendezni – Tagfüggvényei: Insert(index, key, value) RemoveAt(index) A specializált gyűjtemények névtere: – System.Collections.Specialized

25 Specializált Dictionary-k használata

26 String specifikus gyűjtemények – StringCollection Dinamikus Az arraylist kizárólag stringekre alkalmazható változata Nincs többé visszacast – StringDictionary Olyan, mint a Hashtábla, de csak string lehet a kulcs és az érték is. Nincs többé castolásra szükség! Case Insensitive!

27 Case-Insensitive gyűjtemények – CollectionsUtil class CreateCaseInsensitiveHashtable() CreateCaseInsensitiveSortedList() Culture-Invariant gyűjtemények – Hashtable és SortedList konstrukor paramétere egy StringComparer object – StringComparer object InvariantCulture InvariantCultureIgnoreCase

28 NameValueCollection – Kulcs és érték is csak string lehet – Egy kulcshoz, több érték is tartozhat – Index és kulcs alapú hozzáférés – Elem beszúrása: Add(”key”, ”value”) Indexerrel: – nvc[”key”] = ”value” – Az indexer felülírja az előző értéket!!! – Elem kiolvasása: String[] values = nvc.GetValues(”key”);

29 Alapvető gyűjtemények Soros listák Dictionaryk Speciális gyűjtemények Generikus adatszerkezet

30 Mire jó? – boxing/unboxing vs Generics teljesítmény – Típus biztonság Az eddigi gyűjteményeink helyett ha lehet használjunk generikus gyűjteményeket A.NET erősen támogatja a generics-et, nem kell nekünk bajlódni az elkészítéssel. Hozzáféréskor nem kell törődnünk a visszacastolással.

31 Olyan, mint az ArrayList, csak típusos! List intList = new List (); A lista elemei, nem objektek! Ugyanúgy van Add, Sort is

32 Queue<> – Queue q = new Queue () – Mint a nem generikus, de: Kivételkor már nincs szükség castolásra Stack<> – Stack s = new Stack () – Mint a nem generikus, de a pop() már nem objectet ad vissza (pl. itt double-t)

33 Dictionary<> – Leginkább a Hashtable-re, a ListDictionary-re és a HybridDictionary-re hasonlít. – Kulcs/érték párokat tárol. – Indexer szintaktikával adhatunk hozzá elemekét illetve férhetünk hozzájuk. – NEM DictionaryEntry-t tárol!!! – KeyValuePair -t tartlamaz

34 Dictionary<> használata és iterálása

35 A LinkedList osztály fontosabb metódusai: NévLeírás AddAfterEgy már létező node-után szúr be AddBeforeA node elé szúr be AddFirstA lista elejére beszúr egy node-ot AddLastA lista végére beszúr egy node-ot FindAz első node, amelyik tartalmazza a megadott értéket FindLastAz utolsó, amelyik még tartalmazza a megadott értéket RemoveTörli az első node-t, amelyik tartalmazza a megadott értéket. RemoveFirstTörli az első node-ot RemoveLastTörli az utolsó node-ot

36 – IList és ICollection nulláról – Sok munka megspórolható CollectionBase – IList, ICollection, IEnumerable ReadOnlyCollectionBase – Ua. mint CollectionBase, de a user számára DictionaryBase – IDictionary, IEnumerable, ICollection

37 SortedList<> és SortedDictionary<> Ugyanúgy működnek, mint a Dictionary<>, csak rendezve tárolják az elemeiket Generikus láncolt lista (LinkedList) – Hasznos, ha fontos az objektumok kapcsolódása – Elemei: LinkedListNode-ok – Fontosabb Poperty-k: Count, First, Last

38

39 © 2006 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.


Letölteni ppt "Turóczy Attila (MCT, MCP, MCTS) Livesoft Kft. A.NET Framework a gyűjtemény osztályok széles skáláját biztosítja a fejlesztők számára. NévLeírás ArrayListIndex."

Hasonló előadás


Google Hirdetések