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.