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();
}
}
}