„Szoftverfejlesztés .NET platformon - Jegyzet 4. fejezet” változatai közötti eltérés
a David14 átnevezte a(z) Collections and Generics lapot a következő névre: Szoftverfejlesztés .NET plattformon - Jegyzet 4. fejezet |
a Hryghr átnevezte a(z) Szoftverfejlesztés .NET plattformon - Jegyzet 4. fejezet lapot a következő névre: Szoftverfejlesztés .NET platformon - Jegyzet 4. fejezet: pontos név |
(Nincs különbség)
|
A lap jelenlegi, 2013. május 19., 22:27-kori változata
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
70-536 .NET Framework 2.0 Application Development Foundation
%TOC{depth="3"}%
Gyűjtemények
Azonos típusú objektumok egységes kezelése, műveletek végzése rajtuk. =System.Collections= és =System.Collections.Generic= névterek.
Interfészek:
- =IEnumerable=: =GetEnumerator()= hívásra visszaad egy =IEnumerator= típusú iterátort, amivel végig lehet lépkedni a kollekción. Az =IEnumerator= property-i és metódusai:
- =Reset()=
- =MoveNext()=
- =Current=
- =ICollection : IEnumerable=
- =Count=
- =IsSynchronized=
- =SyncRoot=
- =CopyTo()=
- =IList : ICollection= (indexelhető kollekció)
- =IsFixedSize=, =IsReadOnly=
- =Item=: elemek lekérdezése és módosítása index alapján
- =Add()=: elem hozzáfűzése a végéhez
- =Contains()=, =IndexOf()=: elem keresése
- =Insert()=: elem beszúrása
- =Remove()=, =RemoveAt()=: elem törlése érték vagy index alapján
- =Clear()=: lista kiürítése
- =IComparer= (elemek összehasonlítása)
- =int Compare(object a, object b)=
- a<b → negatív a visszatérési értéke
- a=b → 0 a visszatérési értéke
- a>b → pozitív a visszatérési értéke
- =CaseInsensitiveComparer=: stringek összehasonlítása case insensitive módon
- =int Compare(object a, object b)=
- =IDictionary : ICollection= (kulcs-érték párokból álló kollekció)
- =Item=: elemek lekérdezése és módosítása kulcs alapján
- =ICollection Keys=: kulcsok listája
- =ICollection Values=: értékek listája
- =IDictionaryEnumerator GetEnumerator()=
- =Add()=
- =Contains()=
- =Remove()=
- =Clear()=
- Példa*: kollekció elemeinek felsorolása iterátorral:
IEnumerator enumerator = coll.GetEnumerator(); while (enumerator.MoveNext()) Console.WriteLine(enumerator.Current);
Gyűjtemények típusai
Kollekció típusok (=System.Collections= és =System.Collections.Specialized= névterek)
- =ArrayList=: átméretezhető, indexelhető object lista. =Sort()=
- =Queue=: FIFO sor. =Count=, =Enqueue()=, =Dequeue()=, =Peek()=
- =Stack=: LIFO sor. =Count=, =Push()=, =Pop()=, =Peek()=
- =HashTable=:
DictionaryEntry
-ket tárol (object-object párok). Saját típusnál
felül kell definiálni a =GetHashValue()= és az =Equals()= metódusokat. Címezhető kulcs és index alapján.
- =SortedList=: kulcs-érték párokat tárol kulcs szerint rendezett listában
- =ListDictionary=: olyan dictionary, ami kis (<10) elemszámú kollekcióknál hatékony
- =HybridDictionary=: =HashTable= és =ListDictionary= közül a gyorsabbikat választja
- =OrderedDictionary=: Dictionary, ami kulccsal és indexszel is címezhető.
Az elemeket a hozzáadás sorrendjében tárolja.
- =BitArray=: bitek kollekcióját tárolja kompakt módon. A bitekhez egyesével hozzá lehet férni, a kollekciókkal AND, OR, XOR műveleteket lehet végezni
- =BitVector32=: intet kezel 32 bites bit tömbként, a biteken =CreateMask()= hívásokkal végig
lehet iterálni. Paraméter nélkül az LSB-re ad maszkot, 1 paraméterrel a kapott maszkot shifteli eggyel balra.
- =BitVector32.Section=: kicsi egészeket csomagol össze egy
Int32
-ben. Példa:
// az alsó 4 bitre [0,10] intervallumba eső egészek kerülhetnek BitVector32.Section firstSection = BitVector32.CreateSection(10); // a 4-9. bitre [0,50] intervallumba eső egészek kerülhetnek BitVector32.Section secondSection = BitVector32.CreateSection(50, firstSection); BitVector32 packedBits = new BitVector32(10); packedBits[firstSection] = 10; packedBits[secondSection] = 1;
- =NameValueCollection=: string-string multimap. A =GetValues()= metódussal le lehet kérni az
egy kulcshoz tartozó értékeket.
- =StringCollection=, =StringDictionary=: objectek helyett stringeket tárol
Case-insensitive kollekciók létrehozása
- =Hashtable inTable = CollectionsUtil.CreateCaseInsensitiveHashtable();=
vagy
public class InsensitiveComparer : IEqualityComparer { CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer(); public int GetHashCode(object obj) { return obj.ToString().ToLowerInvariant().GetHashCode(); } public new bool Equals(object x, object y) { return _comparer.Compare(x, y) == 0; } } Hashtable dehash = new Hashtable(new InsensitiveComparer());
- =SortedList inList = CollectionsUtil.CreateCaseInsensitiveSortedList();=
Generikus gyűjtemények
Gyorsabb, mint a sima kollekciók, és fordítás idejű típusellenőrzés van.
- =List<T>=: egyszerű generikus lista
- =Stack<T>=, =Queue<T>=: LIFO és FIFO sor
- =SortedList<K, V>=: rendezett lista
- =Dictionary<K, V>=: hash tábla. Elemeit
KeyValuePair<K, V>
-k. - =SortedDictionary<K, V>=: bináris keresőfa
- =LinkedList<T>=: láncolt lista. Nincs nemgenerikus változata.
- =AddFirst=, =AddLast=, =AddBefore=, =AddAfter=: =LinkedListNode<T>= beszúrása
- =First=, =Last=, =Prev=, =Next=: első/utolsó/előző/következő =LinkedListNode<T>=
- A =foreach= a =T= típusú értékeket adja vissza, nem a node-okat.
Saját gyűjtemény létrehozása
.NET 1.1-ben gyakran kellett saját gyűjteményt létrehozni, hogy biztosítsuk az erős típusosságot. .NET 2.0-ban a generikus gyűjtemények miatt már ritkábban van rá szükség.
Interfészek implementálásával
- =ICollection=
- =IList=
- =IDictionary=
Leszármaztatással kevesebb munka
- =CollectionBase : IList, IEnumerable, ICollection=, egyszerű kollekciókhoz
- =ReadOnlyCollectionBase : IList, IEnumerable, ICollection=, nincsenek módosító metódusok és setterek
- =DictionaryBase : IDictionary, IEnumerable, ICollection=
-- Peti - 2007.06.27.