No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.
-
Upload
haydn-helfman -
Category
Documents
-
view
111 -
download
0
Transcript of No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.
![Page 1: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/1.jpg)
No. 239Marcel Gnoth, NTeam GmbH
DatenstrukturenDas Framework der Jäger und Sammler
![Page 2: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/2.jpg)
Zur Person
Dipl. Inf. Marcel Gnoth, MCSDwww.gnoth.net
NTeam GmbH, Berlinwww.nteam.de
Senior Consultant, TrainerVB6, COM, DatenbankenVerteilte InformationssystemeUnd ....
.Net
![Page 3: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/3.jpg)
Inhalt
EinführungInterfaces – der CollectionsCollections – Klassen im
FrameworkCollections – selbstgemacht Sortieren – im Framework AlternativenZusammenfassung
![Page 4: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/4.jpg)
Einführung
Für Jäger und Sammler
![Page 5: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/5.jpg)
Die gute alte Zeit ........
VB 6ArraysVB - Collection
Scripting RuntimeDictionary
![Page 6: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/6.jpg)
.......und Heute ?
Array System.Array
CollectionDictionary
System.Collections...
Microsoft.VisualBasic.Collection
![Page 7: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/7.jpg)
Collection – Klassen in .NetEine Menge von Klassen, die
verschiedene Interfaces implementieren
NamespacesSystem.CollectionsSystem.Collections.SpecializedMicrosoft.VisualBasic.Collection
![Page 8: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/8.jpg)
Interfaces
Was müssen Collections bieten?
![Page 9: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/9.jpg)
Interfaces ÜbersichtIEnumerable, IEnumeratorICollectionIListIDictionaryIComparableIComparer
IEnumerable
ICollection
IList IDictionary• Index • Key
• For Each Support
• Count, CopyTo
![Page 10: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/10.jpg)
Interfaces I
IEnumerableFor Each SupportGetEnumerator()
ICollection Inherits IEnumerableAbzählen, Synchronisation, in Array
kopierenCopyTo(), Count,
IsSynchronized, SyncRoot
![Page 11: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/11.jpg)
Interfaces IIIList Inherits ICollection,
IEnumerableMenge von Elementen, Zugriff über IndexIsReadOnly, IsFixedSizeAdd( ), Insert( )Contains(), IndexOf()Clear( ), Remove( ), RemoveAt( )
![Page 12: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/12.jpg)
Interfaces IIIIDictionary Inherits ICollection,
IEnumerableEnthält DictionaryEntry – ElementeZugriff über Schlüssel IsFixedSize, IsReadOnly Keys, Values Add( ), Remove( ) Clear( ), Contains( )
![Page 13: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/13.jpg)
Interfaces IV
IComparable, IComparerSortieren von ObjektenSpäter....
![Page 14: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/14.jpg)
Collections
Wir schreiten zur Tat...
![Page 15: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/15.jpg)
Übersicht Collections
0 - basiertViele haben:
Constructor der ICollection akzeptiertAddRange, RemoveRange
DataSourceIndexer
VB: myObj = Col.Item( 7 )C#: myObj = Col [ 7 ]
![Page 16: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/16.jpg)
Übersicht I – Klassisch Name Index /
KeyKey eind.
Typ Bemerkung
Array Index - Object
0 basiert
ArrayList Index - Object
Ändert Größe dynamisch, IList
CollectionBase Index - Typed Selbstgemachte Collections
Hashtable Key Ja Object
IDictionary
DictionaryBase Key Ja Typed Selbstgemachte Dictionaries
ListDictionary Key Ja Object
Verkettete Liste, für Count <11
HybridDictionary Key Ja Object
Mix Hashtable + ListDictionary
SortedList Index + Key Ja Object
Sortiert nach Keys
Collection Index + Key Ja Object
„alte“ VB-Collection
NameValueCollect.
Index + Key Nein String Ein Key für mehrere Strings
NameObject-CollectionBase
Index + Key Nein Typed Eigene NameObjectCollections
StringCollection Index - String
StringDictionary Key Ja String
![Page 17: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/17.jpg)
Übersicht II – Die Exoten
Name Typ Bemerkung
Queue Object First in First out
Stack Object Last in First out
BitArray Bits
BitVektor Bits 32 Bits in einer Struktur, schnell
DataSet Daten Keine Objektreferenzen
XMLDocument Daten Keine Objektreferenzen
![Page 18: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/18.jpg)
ArraySystem.Array
Rank: Anzahl der DimensionenLength: Anzahl Elemente absolutGetLength(n): Anzahl Elemente einer
DimensionClone, Reverse
Kann Inhalt sortierenBinäre Suche auf sortierten ElementenGröße kann nicht verändert werdenImplementiert IList
![Page 19: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/19.jpg)
ArrayErzeugen...
VB
C#
foreach (C#)
long[]row = {0,1,2,3};
long[]row = new long[4];
long[]row = new long[]{0,1,2,3};
Dim row()As Integer = {0,1,2,3}
Dim row(4)As Integer
foreach (int ID in colArr){ID=4;
}
![Page 20: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/20.jpg)
ArrayList I
Eindimensionales ArrayKann wachsen und schrumpfen
Capacity, TrimToSizeAdd, AddRange, Insert, InsertRangeRemove, RemoveAt, RemoveRange
Kann Elemente sortieren, suchenZugriff über Index
![Page 21: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/21.jpg)
ArrayList II
ArrayList.Adapter generiert Wrapper für IList ObjekteNutzen der ArrayList Methoden
Einsatz:Schnell, effizient, nur IndexSo oft wie möglich
DemoArrayList.Adapter
DemoArrayList.Adapter
![Page 22: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/22.jpg)
HashTable
PropertiesCountKeys, Values
MethodenAdd, RemoveContainsKey, ContainsValue
Standard IDictionary Implementierung
Keine Sortierung
![Page 23: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/23.jpg)
Hashtable
HashcodeFür jeden Eintrag wird Hashcode
berechnetAnhand des Hashcodes werden
Objekte einsortiertElemente sind nicht in Reihenfolge
ihres Einfügens angeordnetDurch Hashcode schnelles Suchen
![Page 24: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/24.jpg)
HashtableDictionaryEntry
Values
foreach (DictionaryEntry e in colDic) { Console.Write("{0}/{1} ", e.Key,e.Value); }
foreach (CCustomer c in colCustDB.Values){Console.Write(c.Caption);
}
![Page 25: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/25.jpg)
HashTableEinsatz:
Viele ObjekteZufällige / ungeordnete Zugriffe Zugriff über eindeutigen KeyLangsamer als ArrayList
![Page 26: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/26.jpg)
ListDictionary
Einfache Implementierung von IDictionary
verkettete ListeWenig OverheadEmpfohlen für kleine Collections
(<11)Sehr langsam bei Count > 1000
Hashtable benutzen!!System.Collections.Specialized
![Page 27: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/27.jpg)
HybridDictionary
Verwaltet kleine Mengen in ListDictionary
Wechselt automatisch zu Hashtable wenn Collection zu groß wird
System.Collections.Specialized
![Page 28: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/28.jpg)
SortedList
Kreuzung aus Hashtable und ArrayIList und IDictionary
Sortiert nach den KeysZugriff über Key und IndexIntern zwei Arrays für Keys und
ValuesBisschen langsamer als HashtableSehr vielseitig
![Page 29: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/29.jpg)
SortedList
PropertiesItem (Index / Key)CapacityKeys, Values
MethodenAdd, Remove, RemoveAtContainsKey, ContainsValueIndexOfKey, IndexOfValue
![Page 30: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/30.jpg)
VisualBasic.CollectionIn C# Referenz auf
„Microsoft.VisualBasic“ setzen
In VB:
Verhält sich wie die gute alte VB Collection
Zugriff über Index oder KeyAchtung !!! 1 – basiert !!!
private Microsoft.VisualBasic.Collection colVB;
Dim colVB As Collection = New Collection()
![Page 31: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/31.jpg)
VisualBasic.Collection
KompatibilitätsgründeLangsamer als ArrayList und
Hashtable
![Page 32: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/32.jpg)
String Dictionary / CollectionSystem.Collections.Specialized
StringCollectionCollection für Strings
StringDictionaryHashtable für Strings
![Page 33: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/33.jpg)
Queue / StackQueue
First In First OutEnqueue( ) / Dequeue( )
StackLast In First OutPush( ), Pop( )
Gemeinsame Eigenschaften / MethodenPeek( ), Contains( ) ToArray( ), Count
Können mit foreach durchlaufen werden
![Page 34: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/34.jpg)
BitArray / BitVektor
Verwalten BitfelderBitVektor
Struktur, auf dem Stack (Wert-Typ)32 BitsEffizienter als BitArray
Logische Operationen auf den Bits
Dim myBA2 As New BitArray(5, False)Dim myBytes() As Byte = {1, 2, 3, 4, 5}Dim myBA3 As New BitArray(myBytes)Dim myBools() As Boolean = {True, False, True, True, True}Dim myBA4 As New BitArray(myBools)
![Page 35: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/35.jpg)
NameValueCollectionKeys und Values sind StringsZugriff über Key oder IndexMehrere Values können den
gleichen Key habenKey nicht eindeutig!
Gruppiert nach Keysforeach (string k in nv.AllKeys)
Debug.WriteLine(k + ": " + nv[k]);
Key1: Anna,Barbara,ClaudiaKey2: Doris,ErnaKey3: Frida,Gabi,Helga,IngaKey4: Karla
DemoNameValueCol.
DemoNameValueCol.
![Page 36: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/36.jpg)
Collections – selbstgemacht
So schmeckt es immer noch am besten!
![Page 37: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/37.jpg)
Eigene Collection-KlassenAbstrakte Klassen im Framework
ReadOnlyCollectionBaseCollectionBaseDictionaryBaseNameObjectCollectionBase
Eigene Klassen davon ableiten (Vererbung)
Keine Aggregation mehr wie in VB6
oder alles selber machen
![Page 38: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/38.jpg)
CollectionBaseArrayList für eigene typisierte
CollectionsÜber InnerList Property Zugriff
auf ArrayList MemberZugriff über Index
![Page 39: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/39.jpg)
CollectionBase Implementierung
public class CCustomersColBase: CollectionBase { //Konstruktor der Basisklasse aufrufen public CCustomersColBase() : base() { } public void Add(CCustomer Cu) { this.InnerList.Add(Cu); } public void Remove(int x){ this.InnerList.RemoveAt(x); } public CCustomer this[int x] { //Indexer get {return (CCustomer) InnerList[x];} }}
foreach (CCustomer cu in colCustCB){ cu.Caption = "Hallo";}
![Page 40: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/40.jpg)
DictionaryBase
Hashtable für eigene typisierte Collections
InnerHashtableZugriff über Key
![Page 41: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/41.jpg)
DictionaryBase Implementierungpublic class CCustomersDicBase: DictionaryBase { //Konstruktor der Basisklasse aufrufen public CCustomersDicBase() : base() { } public void Add(CCustomer Cu, string k){ this.InnerHashtable.Add(k,Cu); } public void Remove(string Key){ InnerHashtable.Remove(Key); } //Support für spezielles foreach public System.Collections.ICollection Values { get {return this.InnerHashtable.Values;} } //Indexer public CCustomer this[string Key] { get {return (CCustomer) InnerHashtable[Key];} }}
![Page 42: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/42.jpg)
DictionaryBase Zugriff
DictionaryEntry
ICollection Valuesforeach (CCustomer c in colCustDB.Values){
Console.Write (c.Caption);}
foreach (DictionaryEntry d in colCustDB){Console.Write (d.Key + d.Value);
}
![Page 43: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/43.jpg)
NameObjectCollectionBase
Intern eine HashtableZugriff über Index oder KeyGruppiert nach KeysKeys sind StringsKeys können mehrfach vorkommen
Haben mehrere Objekte den gleichen Key, dann bei Zugriff über Key nur das erste Objekt
Über Index Zugriff auf alle Objekte
DemoNameObjColBase
DemoNameObjColBase
![Page 44: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/44.jpg)
Indexer in C#
public CCustomer this[string Key] { get {return (CCustomer) this.BaseGet(Key);}}
public CCustomer this[int Index] { get {return (CCustomer) this.BaseGet(Index);}}
![Page 45: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/45.jpg)
Indexer in VB.NetPublic ReadOnly Property Item(ByVal Index As Integer) _
As CCustomer Get Return CType(Me.InnerList(DBID), CCustomer) End GetEnd Property
Public ReadOnly Property Item(ByVal Key As String) _As CCustomer
Get Return CType(Me.InnerHashtable(Key), CCustomer) End GetEnd Property
![Page 46: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/46.jpg)
Collection – selbstgemachtEigene Collection-Klasse definierenmuß Interfaces implementieren
Mindestens IEnumerable
public class Tokens : IEnumerable{ private string[] elements; public Tokens(string source, char[] delim){ elements = source.Split(delimiters); } public IEnumerator GetEnumerator() { return new TokenEnumerator(this); }}
![Page 47: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/47.jpg)
IEnumerator IEnumerable.GetEnumerator
muß Enumerator zurückgeben
Kann selbst implementiert werdenNur in besonderen AnwendungsgebietenReihenfolge bei foreach verändern .............
![Page 48: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/48.jpg)
IEnumerator - Beispiel
private class TokenEnumerator : IEnumerator { private int position = -1; private Tokens t; public TokenEnumerator(Tokens t) { this.t = t; } public bool MoveNext() { if (position < t.elements.Length - 1) { position++; return true;} else {return false;} } public void Reset() { position = -1; } public object Current { get {return t.elements[position];} }} Demo
Tokens-Collection
DemoTokens-Collection
![Page 49: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/49.jpg)
Sortieren im Framework
Auf die Reihenfolge kommt es an!
![Page 50: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/50.jpg)
SortierenArray, ArrayList und andere
können Objekte sortierenEntweder...
die Objekte implementieren selbst Interface IComparable
...oder...Extra Klassen für ein Objekt, die
IComparer implementierenImmer wenn es im Framework
etwas zu sortieren gibt, werden diese Interfaces benutzt
![Page 51: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/51.jpg)
IComparableIn der Klasse selbst, eine Methode
CompareToArray.Sort ( )
public class CCustomer : IComparable {...//IComparable nach Caption int IComparable.CompareTo(object oCu){ CCustomer Cu = (CCustomer) oCu; return String.Compare
(this.Caption,Cu.Caption); }}
![Page 52: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/52.jpg)
IComparerSeparate Klassen, eine Methode:
CompareArray.Sort (new CustSortByName)
DemoSortieren
DemoSortieren
public class CustSortByName : IComparer { public CustSortByName() { } public int Compare(object obj1,object obj2){ CCustomer cu1 = (CCustomer) obj1; CCustomer cu2 = (CCustomer) obj2; return String.Compare
(cu1.Nachname,cu2.Nachname); }}
![Page 53: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/53.jpg)
Alternativen
Der andere Weg zur Sammlung:DataSetXMLDocument
![Page 54: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/54.jpg)
ADO.Net DataSet
Sehr flexible DatenstrukturKann ohne Verbindung zu einer
Datenbank erzeugt werden
![Page 55: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/55.jpg)
Dataset - Füllen
Mehrere Methoden zum Füllendt.Rows.Adddt.LoadDataRow
foreach (CCustomer xc in source_arrL){ dt.LoadDataRow( new object[] {xc.ID, xc.Key, xc.Nachname, xc.Vorname, xc.Land, xc.Alter}, true);}
![Page 56: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/56.jpg)
DataSet - Zugriff
ZugriffDataTable.Rows.Contains;DataTable.Rows[Index]DataRow = DataTale.Rows.FindDataRow[ ] = DataTable.Select
foreach (int ID in Indicies){ cap = dt.Rows[ID].ItemArray[2].ToString();}
![Page 57: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/57.jpg)
DataSet
gut für Relationale Datenkann mehrere Tabellen enthaltenkann Foreign Key und Unique
Constraints verwaltenErzeugen von Views Filtern und Sortierensehr mächtige Funktionen
DemoDataSet
DemoDataSet
![Page 58: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/58.jpg)
XMLDocument
viel XML in .NetXML hat einen gewissen Overheadgut für hierarchische Datenleicht zu erzeugenkann leicht visualisiert werden
XSLTkomplexe Abfragesprache XPath
![Page 59: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/59.jpg)
XMLDocumentErzeugen aus DataSet
Abfrage eines Knotens
Select über alle Knoten
XMLDocument xmlCustomers = new XmlDocument();xmlCustomers.LoadXml(dsCustomers.GetXml());
DemoDataSet
DemoDataSet
s = "Customer[Key = \"K10\"]";XmlNode xn = xmlCustomers.SelectSingleNode(s);
s = "/Customers/Customer[Land ='PERU']";XmlNodeList xl = xmlCustomers.SelectNodes(s);
![Page 60: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/60.jpg)
Schlußfolgerungen
Und nun?
![Page 61: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/61.jpg)
ZusammenfassungDie wichtigsten Typen
Array, ArrayList (Index)Hashtable (Key)SortedList (Index und Key)
Collectionbase, DictionaryBaseString Collection / Dictionary
Nicht vergessenDataSetXML-Document
![Page 62: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/62.jpg)
Performance
Durchschnitt aus 3 TestsWer misst, misst Mist!
Garbage Collection schlägt ab und zu zu
Dadurch schwanken die Werte
Die richtige Auswahl des Collection – Typs ersetzt kein gutes Design!
![Page 63: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/63.jpg)
Laden 10001.000 Objekte laden
0,0020,0040,0060,0080,00
100,00120,00140,00160,00180,00200,00
Arra
yFix
edLe
ngth
Arra
yLis
t
Que
ue (e
nque
ue)
Sta
ck (p
ush)
Has
hTab
le
Sor
tedL
ist
List
Dic
tiona
ry
Hyb
ridD
ictio
nary
Nam
edV
alue
Col
lect
ion
VB
Col
lect
ion
CC
ustD
icB
ase
Cus
tCol
Bas
e
Cus
tNam
edO
bjC
olB
ase
Stri
ngC
olle
ctio
n
Stri
ngD
ictio
nary
Dat
aset
(Loa
dDat
aRow
)
Dat
aset
(Row
s.A
dd)
XM
LDoc
umen
t (au
s
Tic
ks (m
s)
1.000 Objekte
![Page 64: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/64.jpg)
Laden 30.00030.000 Objekte laden
0,00
500,00
1000,00
1500,00
2000,00
2500,00
Arr
ayFi
xedL
engt
h(S
etva
lue)
Arr
ayLi
st
Que
ue (e
nque
ue)
Sta
ck (p
ush)
Has
hTab
le
Sor
tedL
ist
List
Dic
tiona
ry
Hyb
ridD
ictio
nary
Nam
edV
alue
Col
lect
ion
VB
Col
lect
ion
CC
ustD
icB
ase
Cus
tCol
Bas
e
Cus
tNam
edO
bjC
olB
ase
Stri
ngC
olle
ctio
n(S
tring
s)S
tring
Dic
tiona
ry(S
tring
s)
Dat
aset
(Loa
dDat
aRow
)
Dat
aset
(Row
s.A
dd)
XM
LDoc
umen
t (au
sD
atas
et)
Tick
s (m
s)
![Page 65: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/65.jpg)
Zufälliger ZugriffZufälliger Zugriff (30.000)
0,00
100,00
200,00
300,00
400,00
500,00
Arr
ay (
Index)
Arr
ayLis
t (I
ndex)
Queue (
Dequeue)
Sta
ck (
Pop)
HashT
able
(K
ey)
HashT
able
(C
onta
insK
ey)
Sort
edLis
t (K
ey)
Sort
edLis
t (G
etB
yIn
dex)
Sort
edLis
t (C
onta
insK
ey)
HybridD
ictio
nary
(K
ey)
HybridD
ictio
nary
Nam
eV
alu
eC
olle
ctio
n (
Index)
Nam
edV
alu
eC
olle
ctio
n (
Key)
Nam
eV
alu
eC
olle
ctio
nV
B-C
olle
ctio
n (
Index)
VB
-Colle
ctio
n (
Key)
CC
usto
mers
Dic
Base (
Key)
CC
usto
mers
ColB
ase (
Index)
CC
ustu
mers
Nam
eO
bjC
olB
ase
CC
ustu
mers
Nam
eO
bjC
olB
ase
Str
ingC
olle
ctio
n (
Index)
Str
ingD
ictio
nary
(K
ey)
Data
set (R
ow
s[Index])
Data
set (R
ow
s.F
ind)
Data
set (S
ele
ct+
Sort
=#196
XM
LD
ocum
ent
XM
LD
ocum
ent
Tic
ks (
ms)
![Page 66: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/66.jpg)
Zufälliger Zugriff (30.000)
Array (Index) 00,00
ArrayList (Index) 10,00
Queue (Dequeue) 03,33
Stack (Pop) 03,33
HashTable (Key); 43,33
HashTable (ContainsKey) 26,67
SortedList (Key) 387,67
SortedList (GetByIndex) 03,33
SortedList (ContainsKey) 377,33
HybridDictionary (Key) 37,00
HybridDictionary (ContainsKey) 30,00
NameValueCollection (Index) 20,00
NamedValueCollection (Key) 70,00
NameValueCollection (GetKey) 10,00
![Page 67: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/67.jpg)
Zufälliger Zugriff (30.000)VB-Collection (Index) 50,00
VB-Collection (Key) 130,00
CCustomersDicBase (Key) 36,67
CCustomersColBase (Index) 10,00
CCustumersNameObjColBase (Index) 13,33
CCustumersNameObjColBase (Key) 66,67
StringCollection (Index) 10,00
StringDictionary (Key) 73,33
Dataset (Rows[Index]) 104,00
Dataset (Rows.Find) 397,00
Dataset (Select+Sort=#196 Rows) 220,33
XMLDocument (SelSingleNode,#150) 16.066,67
XMLDocument (SelectNodes=#196) 0,00
![Page 68: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/68.jpg)
Links
Code zum Vortraghttp://www.gnoth.net/BASTA/Feb02.ht
m
Dr. GUI von http://msdn.microsoft.com/ In der MSDN nach „Dr. GUI.NET #4“
suchen
![Page 69: No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.](https://reader035.fdocuments.us/reader035/viewer/2022081516/55204d7349795902118c6f89/html5/thumbnails/69.jpg)
Fragen?
Uff...Uff...