Professional Documents
Culture Documents
Vježbe 05
Vinko Petričević
Polja, indekseri,
kolekcije
u .net okruženju imamo mnoštvo klasa kolekcije
od verzije 2.0 većina ih je generička
najjednostavnija kolekcija je Array, za koju C#
ima ugrađenu podršku.
indekseri omogućuju dohvat n-tog člana kolekcije
.net ima različita sučelja, poput IEnumerable i
ICollection, pomoću kojih se može iterirati po
elementima
Polje (array)
indeksirana kolekcija objekata istog tipa
int[] poljeBrojeva = new int[5];
foreach(Osoba o in poljeOsoba) {
Console.WriteLine(o.ToString());
}
params
omogućava prosljeđivanje promjenjivog broja
parametara bez eksplicitnog stvaranja polja
pravokutna (rectangular)
int[,] polje = new int [4,3];
int[,] polje = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {9, 10, 11} };
pristup elementu
polje[1,2]
pristup elementu
for(int i=0; i<polje.Length; ++i)
for(int j=0; j<polje[i].Length; ++j)
polje[i][j] = i+j;
Postavljanje granice polja
int[] duljinePolja = new int[2] { 3, 5 };
int[] granicePolja = new int[2] { 2, 3 };
Array visedimenzionalnoPolje = Array.CreateInstance(
typeof(string), duljinePolja, granicePolja);
// 0 2 4
// 1 3 7
implicitna pretvorba polja
primjer
class Osoba {…}
class Osobe {
public Osoba this[int indeks] {
get { … } set { … } }
public Osoba this[string indeks] {
get { … } set { … } }
}
Osobe oo; …
o[15] = …
o[“Ivan”] = …
Zadatak 4
Napišite klasu Osoba i Osobe.
klasa Osobe ima konstruktor koji kao
parametar prima maksimalan broj osoba
osobe je moguće naći po imenu, ili rednom
broju
kolekcije
sučelja za implementaciju generičkih kolekcija:
ICollection<T> – Osnovno sučelje za generičke
kolekcije. Implementiraju ga sve kolekcije.
IComparer<T> i IComparable<T> – Uspoređuje dva
objekta unutar kolekcije da bi se kolekcija mogla sortirati.
IEnumerator<T> i IEnumerable<T> – Enumerira
(prebrojava) kolekciju pomoću iskaza foreach.
IDictionary<K, V1> – Koristi se za kolekcije temeljene na
parovima ključ/vrijednost kakva je Dictionary.
IList<T> – Koriste ga kolekcije koje se mogu indeksirati
poljima.
IEnumerable<T>
koristi se u foreach iskazu
class Osobe: IEnumerable<Osoba> {
private Osoba[] osobe; // privatno polje osoba
public Osobe(int brojOsoba) { this.osobe = new Osoba[brojOsoba]; }
public int BrojOsoba { get { return this.osobe.Length; } }
public Osoba this[int indeks] {
get { return this.osobe[indeks]; }
set { this.osobe[indeks] = value; }
}
// implementacija sučelja IEnumerable<Osoba>
public IEnumerator<Osoba> GetEnumerator() {
foreach (Osoba o in this.osobe) {
yield return o;
}
}
// implementacija sučelja IEnumerable
// jer IEnumerable<T> izvodi iz IEnumerable moramo implementirati i njega
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return GetEnumerator();
}
}
IEnumerable<T>