Collection pada C#
Meskipun array pada C# dapat menyimpan banyak nilai sekaligus, mereka tidak dapat mengubah ukurannya secara dinamis. Class-class collection pada C# mirip dengan Array, tetapi dapat diubah ukurannya secara dinamis. Ada banyak class yang tersedia Collections pada C#. Di bawah ini adalah beberapa contoh program yang menggunakan Collections. Akan tetapi, sebelum itu, Saya ingin memperkenalkan perulangan foreach pada C# yang sangat berguna ketika digabungkan dengan Collection. Struktur perulangan foreach adalah:
foreach ([Tipe data item] [IdentifierItem] In [Collection]) { //Hal yang dilakukan //Contoh: Console.WriteLine([IdentifierItem]); }
List pada C#
Di bawah ini adalah contoh suatu program yang menggunakan List pada C#. Method yang penting pada List adalah Add, Remove, RemoveAt, dan Contains. Untuk method Remove dan Contains, kita perlu mengoverride method Equals.
class Program { static void Main(string[] args) { Sales oSales = new Sales(1); oSales.AddItem("Coca Cola", 3); oSales.AddItem("Sprite", 3); oSales.AddItem("Fanta", 5); oSales.RemoveLast(); oSales.AddItem("Coca Cola", 5); oSales.AddItem("Fanta", 3); oSales.RemoveItem(new Sales.SalesItem() { Name = "Sprite" }); oSales.RemoveItem(new Sales.SalesItem() { Name = "Sprite" }); oSales.ShowItems(); Console.ReadKey(); } } public class Sales { public int ID { get; set; } public DateTime TanggalBeli { get; set; } public List<SalesItem> Items { get; private set; } public Sales(int newid) { this.ID = newid; TanggalBeli = DateTime.Now; Items = new List<SalesItem>(); } public bool AddItem(string name, int jumlah) { SalesItem itemBaru = new SalesItem() { Nama = name, Jumlah = jumlah }; if (!Items.Contains(itemBaru)) { Items.Add(itemBaru); Console.WriteLine(itemBaru.Nama + " telah ditambahkan"); return true; } else { Console.WriteLine(itemBaru.Nama + " telah ditambahkan sebelumnya"); return false; } } public bool RemoveItem(SalesItem item) { if (!Items.Contains(item)) { Console.WriteLine("Item tidak ditemukan"); return false; } Items.Remove(item); Console.WriteLine(item.Nama + " telah diremove"); return true; } public bool RemoveLast() { if (Items.Count == 0) { Console.WriteLine("Tak ada item"); return false; } Console.WriteLine(Items[Items.Count - 1].Nama + " telah diremove"); Items.RemoveAt(Items.Count - 1); return true; } public void ShowItems() { Console.WriteLine("------- Daftar Item ----------"); foreach (SalesItem i in Items) { Console.WriteLine(i.Nama + ": " + i.Jumlah); } Console.WriteLine("--------------------------------"); } public class SalesItem { public string Nama { get; set; } public int Jumlah { get; set; } //Digunakan untuk Contains dan Remove, untuk membandingkan objek public override bool Equals(object obj) { //Dengan var, C# akan otomatis mengetahui bahwa Other adalah SalesItem var Banding = obj as SalesItem; if (Banding.Nama == this.Nama) return true; return false; } } }
Dictionary pada C#
Dictionary (kamus) pada C# berisi pasangan-pasangan key dan value. Tipe item pada Dictionary adalah KeyValuePair<tipeKey, tipeValue>. Berikut adalah contoh program yang menggunakan Dictionary:
class Program { static void Main(string[] args) { Dictionary<string, string> InggrisIndonesia = new Dictionary<string, string>(); InggrisIndonesia.Add("Get", "Ambil"); InggrisIndonesia.Add("Like", "Seperti"); InggrisIndonesia.Add("Book", "Buku"); InggrisIndonesia.Add("I", "Saya"); InggrisIndonesia.Add("Code", "Kode"); InggrisIndonesia.Add("For", "Untuk"); InggrisIndonesia.Add("Money", "Uang"); foreach (KeyValuePair<string, string> kv in InggrisIndonesia) { Console.WriteLine(kv.Key + " = " + kv.Value); } Console.WriteLine("---------------------------"); Console.Write("Bahasa Indonesia dari: "); string cari = Console.ReadLine(); if (InggrisIndonesia.ContainsKey(cari)) { Console.WriteLine(InggrisIndonesia[cari]); } else { Console.WriteLine("Kata tidak ditemukan"); } Console.ReadKey(); } }
Queue pada C#
Ada 2 class Queue pada C#. Satu berada di bawah namespace System.Collections, yang lain berada di bawah namespace System.Collections.Generic. Pada program di bawah, kita menggunakan class Queue Generic:
class Program { static void Main(string[] args) { Queue<Pelanggan> antrian = new Queue<Pelanggan>(); antrian.Enqueue(new Pelanggan("Fandi", "62852 XXXX YYY")); antrian.Enqueue(new Pelanggan("Susanto", "62813 XXXX YYY")); antrian.Enqueue(new Pelanggan("Billy", "62819 XXX YYYY")); Pelanggan Dilayani; for (int i = 1; i <= 3; i++) { Dilayani = antrian.Dequeue(); Console.WriteLine("Antrian No." + Dilayani.NoAntrian + ", Tuan." + Dilayani.Nama + " sedang dilayani"); } Console.ReadKey(); } } class Pelanggan { //Access modifier tidak ditulis = internal public static int NoAntrianBerikutnya = 1; public string Nama { get; set; } public string Telepon { get; set; } public int NoAntrian { get; set; } public Pelanggan(string nama, string telp) { this.Nama = nama; this.Telepon = telp; this.NoAntrian = NoAntrianBerikutnya++; //Berarti: NoAntrian = NoAntrianBerikutnya //Kemudian: NoAntrianBerikutnya++ } }
Masih ada banyak class Collection pada C#. Tetapi kita tidak akan membahas semuanya di sini. Untuk daftar class Collection pada C# yang lengkap, kunjungi MSDN.