
C#>Collections
Collections
List | SortedList | Queue | Stack | HashSet
Det er laget en klasse person som brukes som eksempelobjekt i avsnittene nedenfor.
_person
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CollectList { class person { private String fNavn; private String eNavn; private String land; private int id; public person(String fn, String en,String lnd,int nr ) { fNavn = fn; eNavn = en; land = lnd; id = nr; } public String ForNavn { get { return fNavn; } set { fNavn = value; } } public String EtterNavn { get { return eNavn; } set { eNavn = value; } } public String Land { get { return land; } set { land = value; } } public int ID { get { return id; } set { id = value; } } override public String ToString() { return eNavn + "," + fNavn+" fra "+land+" id="+id; } } }
Eksemplene nedenfor er hver pakket inn i en klasse. Dette bare for at det skal være lett å kjøre demonstrasjoner i en applikasjon. Du bør sjekke ut demoprogrammet som angitt nederst på siden og eksperimentere med det.
List
_list
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CollectList { class LISTS { List<person> Stab; public LISTS() { Stab = new List<person>(); Stab.Add(new person("Ole", "Brum","Hakkebakkeskogen",123)); Stab.Add(new person("Lionel", "Messi","Argentina",345)); Stab.Add(new person("Peder", "Ås","Norge",201)); Stab.Add(new person("Ari", "Behn","Norge",301)); Stab.AddRange(new person[] { new person("Miles", "Davies","USA",1020), new person("Dexter","Gordon","USA",1030) }); } public void doit() { //---- do all-- foreach (person p in Stab) { Console.WriteLine(p); } //----- pick one ----- person someone = Stab[3]; Console.WriteLine(Stab.IndexOf(someone)); //------- select first with predicate ------ int ix=Stab.FindIndex(new FinnLand("Norge").FinnlandPredicate); if(ix!=-1) Console.WriteLine(Stab[ix]); else Console.WriteLine("fant ingen"); //-------- select all with predicate ------ List<person> Nordmenn = Stab.FindAll(new FinnLand("Norge").FinnlandPredicate); foreach (person p in Nordmenn) { Console.WriteLine(p); } //------- select all with lambda ----- List<person> Amerikanere = Stab.FindAll(p => p.Land =="USA"); foreach (person p in Amerikanere) { Console.WriteLine(p); } Console.ReadLine(); } // handling predicate public class FinnLand { private String land; public FinnLand(String land) { this.land = land; } public bool FinnlandPredicate(person p) { if (p == null) throw new ArgumentNullException("person"); return p.Land == land; } } } }
SortedList
_sortedlist
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CollectList { class SORTEDLISTS { SortedList<string,person> team; public SORTEDLISTS() { team = new SortedList<string, person>(); } public void doit() { person[] personer ={new person("jens","mo","N",1), new person("anders","øygarden","N",5), new person("svein","jensen","D",19), new person("bjørn","anderson","S",12)}; foreach (person p in personer) { try { // key must be unique team.Add(p.Land, p); } catch (Exception ex) { Console.WriteLine(ex.Message); } } foreach (String id in team.Keys) { Console.WriteLine(id); } Console.ReadLine(); } } }
Queue
_queue
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CollectList { class QUEUS { Queue<person> waiting; public QUEUS() { waiting = new Queue<person>(); } public void doit() { waiting.Enqueue(new person("Jens","Pedersen","Danmark",3451)); waiting.Enqueue(new person("Kari", "Olsen", "Norge", 3751)); Console.WriteLine(waiting.Peek()); foreach(person w in waiting) Console.WriteLine(w); person p=waiting.Dequeue(); Console.WriteLine("removed: " + p); Console.WriteLine(waiting.Peek()); person q=new person("Juan","Monteriro","Spania",3041); //waiting.Enqueue(q); if(waiting.Contains(q)) Console.WriteLine(q+" er i køen"); else Console.WriteLine(q + " er ikke i køen"); Console.ReadLine(); } } }
Stack
_stack
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CollectList { class STACKS { Stack<person> stabelen; public STACKS() { stabelen = new Stack<person>(); } public void doit() { stabelen.Push(new person("Sverker","Jönson","Sverige",12)); person p=new person("Oleg","Putin","Russland",37); stabelen.Push(p); while(stabelen.Count >0) { person q=stabelen.Pop(); Console.WriteLine(q); } Console.ReadLine(); } } }
HashSet
_hashset
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CollectList { class SETS { HashSet<person> allPersons; HashSet<person> team; HashSet<person> otherPersons; public SETS() { allPersons = new HashSet<person>(); team = new HashSet<person>(); otherPersons = new HashSet<person>(); } public void doit() { person[] personer ={new person("jens","mo","N",1), new person("anders","øygarden","N",5), new person("svein","jensen","D",19), new person("bjørn","anderson","S",12), new person("pekka","karjalainen","F",12)}; foreach(person p in personer) allPersons.Add(p); // select team team.Add(personer[0]); team.Add(personer[1]); // select not in team otherPersons.UnionWith(allPersons); otherPersons.ExceptWith(team); foreach(person p in team) Console.WriteLine("Team member: "+p); foreach (person p in otherPersons) Console.WriteLine("Not in team: " + p); foreach (person p in allPersons) Console.WriteLine("Blandt alle: " + p); Console.ReadLine(); } } }