You are currently viewing Bekerja Dengan Tipe Array Di C#

Bekerja Dengan Tipe Array Di C#

Halo! Selamat datang kembali di “Seri Belajar Dasar Pemrograman Bahasa C#“. Di materi sebelumnya, kita telah mempelajari materi tentang tipe data dan variabel untuk menyimpan dan memanipulasi sebuah data.

Pada materi kali ini, kita akan membawa konsep tersebut untuk mengkonstruksi sebuah struktur data yang cukup sering digunakan, yaitu tipe Array. Saya berharap, setalah mempelajari materi ini, Anda mampu memahami dan bekerja dengan tipe array di c#.

Motivasi Menggunakan Tipe Array Di C#?

Bayangkan sebuah situasi di mana kita perlu menyimpan 5 bilangan integer. Apabila kita menggunakan konsep yang kita pelajari di materi tipe data dan variabel, maka kita membutuhkan 5 variabel dengan tipe data int seperti pada contoh kode program di bawah ini.

using System;

namespace BekerjaDenganTipeArray
{
    class Program
    {
        static void Main(string[] args)
        {
            int angka1 = 10;
            int angka2 = 20;
            int angka3 = 30;
            int angka4 = 40;
            int angka5 = 50;

            Console.WriteLine(angka1);
            Console.WriteLine(angka2);
            Console.WriteLine(angka3);
            Console.WriteLine(angka4);
            Console.WriteLine(angka5);

            Console.ReadLine();
        }
    }
}

Cukup simpel.

Tapi bagaimana jika kemudian kita perlu menyimpan 5000 bilangan integer, atau bahkan 50,000 bilangan integer? Apakah kita akan menggunakan 5000 atau 50,000 variabel? Sepertinya ini bukan merupakan ide yang bagus.

Untuk mengatasi situasi seperti ini, C# menyediakan tipe Array. Tipe Array sendiri adalah sebuah struktur data yang bisa menyimpan sebuah atau banyak data (nilai) dari tipe data yang sama ke dalam satu kontainer. Struktur data sendiri adalah konsep tentang bagaimana koleksi dari banyak data, disimpan, digunakan, dan dimanipulasi dari dalam satu kontainer.

Tipe Array bisa Anda lihat sebagai sebuah matriks seperti yang telah kita pelajari di materi tentang konstruksi perulangan for.

Untuk membantu pemahaman Anda, buatlah sebuah aplikasi console bernama BekerjaDenganTipeArray.

Deklarasi Dan Inisialisasi Array Di C#

Sama seperti mendeklarasikan sebuah variabel biasa, mendeklarasikan sebuah variabel sebagai array tidaklah sulit. Cukup simpel. Kita hanya perlu menambahkan tanda kurung siku ([ ]) di depan tipe datanya, seperti contoh berikut ini.

int[] varArray;

Dengan begitu, sekarang kita memiliki satu kontainer untuk menampung sebuah atau banyak bilangan integer. Namun tentunya, deklarasi tipe array di atas hanya akan menghasilkan sebuah kontainer kosong. Oleh karena itu, kita akan mendapatkan pesan eror apabila langsung menggunakannya tanpa menginisialisasinya terlebih dulu.

Ada beberapa cara yang bisa kita gunakan untuk menginisialisasi sebuah array. Sekali lagi, tidak ada salah dan benar dengan cara apapun yang nantinya Anda gunakan. Prinsipnya, gunakan mana yang menurut Anda lebih mudah dimengerti di kemudian hari.

int[] varArray = new int[4];

Jika Anda perhatikan, ada perbedaan cukup signifikan antara menginisialisasi variabel biasa dengan menginisialisasi variabel array. Untuk menginisialisasi variabel biasa, kita hanya perlu menetapkan sebuah nilai konstan ke dalam variabel tersebut. Sedangkan untuk menginisialisasi variabel array, kali ini kita menggunakan kata kunci new diikuti dengan int[4].

Kode program int[4] digunakan untuk memberi tahu compiler bahwa array dari tipe int yang telah kita deklarasikan, dapat menampung 4 buah data. Sementara, kata kunci new digunakan untuk mengalokasikan ruang memori sesuai dengan ukuran yang telah ditentukan, dalam hal ini 4 ruang memori.

Deklarasi dan inisialisasi di atas bisa kita tulis seperti berikut ini.

int[] varArray;
varArray = new int[4];

Menentukan Nilai Setiap Elemen Array

Sebelumnya kita telah mendeklarasikan dan menginisialiasasi sebuah array dari tipe int bernama varArray. Namun, kita sama sekali belum menentukan nilai apapun untuk setiap elemen dari array tersebut. Pertanyaanya, apakah setiap elemen dari varArray bernilai kosong (null)?

Untuk menjawab pertanyaan tersebut, tambahkan kode program di bawah ini.

foreach (int i in varArray)
{
    Console.WriteLine($"{i}");
}

/*
output:
0
0
0
0
*/

Jika Anda menjalankan kode program di atas, Anda akan melihat bahwa setiap elemen dari varArray bernilai 0. Secara otomatis, compiler akan menetapkan nilai default dari tipe int, yaitu 0, untuk setiap elemen varArray pada saat proses inisialisasi.

Untuk menentukan nilai setiap elemen sesuai dengan nilai yang kita inginkan pada saat inisialisasi, ubah deklarasi dan inisialisasi varArray sebelumnya menjadi seperti kode program di bawah ini.

int[] varArray = new int[4] {5, 8, 12, 96};

Bilangan integer di dalam kurung kurawal di atas akan digunakan oleh compiler untuk menentukan nilai setiap elemen dari varArray. Jumlah bilangan integer di dalam kurung kurawal tersebut harus sesuai dengan ukuran array yang diinisialisasi. karena ukuran varArray adalah 4, maka nilai yang kita berikan juga harus berjumlah 4 buah.

Coba jalankan program Anda dan amati keluaran yang sekarang Anda dapatkan.

Apabila sebuah array dideklarasikan seperti kode program di atas, maka kita tidak perlu lagi menentukan ukuran dari array tersebut. Compiler akan melihat berapa jumlah nilai yang diberikan untuk array tersebut. Untuk contoh di atas, karena kita memberikan 4 buah nilai, maka compiler akan mengalokasikan 4 ruang memori untuk varArray.

Oleh karena itu, deklarasi dan inisialisasi array di atas bisa ditulis seperti berikut ini.

int[] varArray = new int[] {5, 8, 12, 96};

Perhatikan bahwa kali ini kita tidak perlu secara spesifik menuliskan angka 4 di dalam tanda kurung siku.

Kita bisa meringkas kode program di atas lebih jauh lagi menjadi seperti di bawah ini.

int[] varArray = { 5, 8, 12, 96 };

Satu hal yang perlu Anda perhatikan adalah, karena varArray dideklarasikan sebagai array dari tipe int, maka nilai yang Anda berikan juga harus dari tipe int.

Kode program di bawah ini akan menghasilkan eror karena angka 8.5 bukan merupakan bilangan dari tipe int.

int[] varArray = { 5, 8.5, 12, 96 };

Mengakses Elemen Array

Pertanyaan selanjutnya adalah, bagaimana kita mengakses nilai-nilai elemen yang telah kita tentukan?

Caranya cukup simpel dan mudah, setiap elemen array bisa kita akses dengan menggunakan indeks. Elemen pertama sebuah array memiliki indeks 0, elemen kedua memiliki indeks 1, dan seterusnya.

Untuk membantu pemahaman Anda, tambahkan kode program di bawah ini ke dalam program yang Anda buat sebelumnya.

Console.WriteLine($"Nilai dari elemen-elemen varArray[]: {varArray[0]}, {varArray[1]}, {varArray[2]}, {varArray[3]}");

Jika Anda perhatikan sekilas, mengakses sebuah elemen array hampir sama dengan mengakses sebuah variabel biasa. Bedanya kali ini, kita menambahkan tanda kurung siku dengan sebuah angka di belakang nama variabelnya.

Angka di dalam kurung siku merupakan indeks dari setiap elemen di dalam sebuah array. Contohnya, varArray[0] digunakan untuk mengakses nilai dari elemen pertama (indeks 0) dari array varArray.

Coba jalankan aplikasi Anda dan perhatikan keluaran yang Anda dapatkan. Semestinya, Anda akan mendapatkan keluaran seperti di bawah ini.

Nilai dari elemen-elemen varArray[]: 5, 8, 12, 96

Selain hanya sekedar mendapatkan sebuah nilai dari setiap elemen array, kita juga bisa mengubah nilai dari elemen-elemen tersebut menggunakan indeks. Tambahkan kode program di bawah ini ke dalam program Anda.

varArray[0] = 153;
varArray[3] = 67;
Console.WriteLine($"Nilai setiap elemen varArray[] setelah diubah: {varArray[0]}, {varArray[1]}, {varArray[2]}, {varArray[3]}");

/*
output:
Nilai elemen varArray[] setelah diubah: 153, 8, 12, 67
*/

Perhatikan nilai pada elemen dengan indeks 0 dan indeks 3. Elemen dengan indeks 0 yang semula bernilai 5, kini menjadi bernilai 153. Elemen dengan indeks 3 yang semula bernilai 12, kini menjadi bernilai 67. Mengubah nilai suatu elemen array bisa kita lakukan dengan cukup simpel dan mudah, bukan?

Sekarang, tambahkan kode program di bawah ini.

varArray[4] = 89;
Console.WriteLine(intArr[4]);

Pada kode program di atas, kita mencoba menetapkan sebuah nilai ke elemen ke-5 (indeks 4) dari varArray. Apakah varArray memiliki elemen ke-5? Tentunya tidak, bukan? Oleh karena itu, kode program di atas akan menghasilkan eksepsi IndexOutOfRangeException yang berarti bahwa kita mencoba untuk mengakses sebuah indeks di luar rentang ukuran array varArray, yaitu 4.

Yang perlu Anda perhatikan adalah, ukuran dari array tidak bersifat dinamis. Artinya, sekali sebuah array dideklarasikan dan diinisialisasi dengan ukuran tertentu, maka ukurannya tidak lagi bisa diubah (ditambah maupun dikurangi).

Melakukan Iterasi Pada Sebuah Array

Pada materi sebelumnya, kita telah mempelajari tentang perulangan for dan perulangan foreach.

Dengan menggunakan kedua konstruksi perulangan tersebut, kita bisa melakukan operasi yang sama pada setiap elemen array. Kode program di bawah menampilakan nilai dari setiap elemen array menggunakan konstruksi perulangan for.

for (int i = 0; i <= 3; i++)
{
    Console.WriteLine($"Elemen dengan indeks {i} = {varArray[i]}");
}

Dengan konstruksi perulangan seperti di atas, kita tidak perlu repot mengulangi baris kode program yang sama untuk setiap elemen array seperti di bawah ini.

Console.WriteLine($"Elemen dengan indeks 0 = {varArray[0]}");
Console.WriteLine($"Elemen dengan indeks 1 = {varArray[1]}");
Console.WriteLine($"Elemen dengan indeks 2 = {varArray[2]}");
Console.WriteLine($"Elemen dengan indeks 3 = {varArray[3]}");

Perhatikan kembali perulangan for di atas. Di dalam pernyataan for, kita menggunakan sebuah konstanta, yaitu angka 3, untuk menentukan batas atas perulangan (i <= 3). Angka 3 merupakan indeks terbesar dari varArray, dan ekspresi i <= 3 akan menghentikan perulangan ketika nilai i sama dengan 3.

Untuk melakukan iterasi pada sebuah array di C#, selain menggunakan konstanta untuk menentukan batas atas perulangan for, kita bisa memanfaatkan properti Length yang didefinisikan di class System.Array. Properti tersebut menyimpan informasi mengenai ukuran dari sebuah array.

Perhatikan kode program di bawah ini.

Console.WriteLine($"Ukuran varArray = {varArray.Length}");
for (int i = 0; i < varArray.Length; i++)
{
    Console.WriteLine($"Elemen {i} = {varArray[i]}");
}

/*
output:
Ukuran varArray = 4
Elemen 0 = 153
Elemen 1 = 8
Elemen 2 = 12
Elemen 3 = 67
*/

Dari keluaran yang dihasilkan oleh kode program di atas, kita bisa mengetahui bahwa nilai dari varArray.Length adalah 4. Sesuai dengan ukuran varArray, yaitu 4. Dengan demikian, kita bisa menggunakannya di dalam ekspresi i < varArray.Length untuk menentukan batas atas perulangan.

Perhatikan juga bahwa kita tidak lagi menggunakan tanda <=, namun menggunakan tanda <. Karena nilai varArray adalah 4, maka perulangan harus dihentikan tepat sebelum nilai i sama dengan 4. Jika tidak, maka perulangan tersebut akan mencoba mengakses indeks ke-4 dari varArray dan mengakibatkan eksepsi (tidak ada indeks ke-4 pada varArray).

Lebih jauh lagi, tanpa harus memperdulikan batas bawah dan batas atas sebuah array, kita bisa menggunakan konstruksi perulangan foreach untuk melakukan iterasi pada setiap elemen array.

foreach (int nilai in intArr)
{
    Console.WriteLine($"Nilai = {nilai}");
}

Dengan konstruksi perulangan foreach seperti di atas, setiap elemen array varArray akan disimpan di variabel nilai. Kemudian, perulangan foreach akan mengulangi operasi Console.WriteLine($"Nilai = {nilai}"); sebanyak berapapun jumlah elemen dari varArray.

Array Multi-Dimensi

Sejauh ini, kita telah bekerja dengan variabel varArray yang merupakan sebuah array satu dimensi. Array varArray disebut dengan array satu dimensi karena kita hanya membutuhkan satu buah indeks saja untuk mengakses nilai setiap elemennya. Indeks tersebut bisa kita katakan merepresentasikan posisi dari kolom-kolom di mana elemen array disimpan.

Adakalanya kita membutuhkan sebuah kontainer yang bisa merepresentasikan jumlah baris dan jumlah kolom sekaligus. Misalnya, kita ingin membuat sebuah game permainan catur. Tentu saja, karena papan catur terdiri dari beberapa kolom dan baris, setiap posisi di atas papan catur harus bisa kita akses berdasarkan posisi baris dan kolomnya.

Deklarasi array multi-dimensi di C#

Kita bisa mendeklarasikan sebuah array dua dimensi seperti pada kode program di bawah ini.

int[,] duaDimensi = new int[3, 3];

Jika Anda perhatikan, ada sedikit perbedaan antara mendeklarasikan array dua dimensi dengan cara mendeklarasikan array satu dimensi. kali ini kita menambahkan tanda koma di dalam tanda kurung siku setelah tipe datanya. Selain itu, kali ini kita juga memberi tahu compiler bahwa array yang kita deklarasikan terdiri dari 3 grup elemen, dimana 1 grup terdiri dari 3 elemen array. Dengan begitu, nantinya compiler akan mengalokasikan 9 (3 x 3) potongan memori untuk array yang kita deklarasikan.

Inisialisasi array multi-dimensi

Kita bisa menggunakan indeks array untuk mengakses atau mengubah nilai setiap elemen array dua dimensi, sama seperti pada array satu dimensi. Namun kali ini, kita membutuhkan dua indeks, yaitu indeks “baris” dan indeks “kolom”, agar bisa memanipulasi setiap elemen dari array dua dimensi.

Perhatikan contoh kode program di bawah ini.

// Baris ke-0
duaDimensi[0, 0] = 1;
duaDimensi[0, 1] = 2;
duaDimensi[0, 2] = 3;
// Baris ke-1
duaDimensi[1, 0] = 4;
duaDimensi[1, 1] = 5;
duaDimensi[1, 2] = 6;
// Baris ke-2
duaDimensi[2, 0] = 7;
duaDimensi[2, 1] = 8;
duaDimensi[2, 2] = 9;

Angka pertama di dalam tanda kurung siku merupakan indeks “baris”, sementara angka kedua merupakan indeks “kolom”.

Untuk mendeklarasikan sebuah array sekaligus menginisialisasinya, kita bisa menulis deklarasinya menjadi seperti kode program di bawah ini.

int[,] duaDimensi =
{
    {1, 2, 3},  // Baris ke-0
    {4, 5, 6},  // Baris ke-1
    {7, 8, 9}   // Baris ke-2
};

Yang perlu Anda perhatikan ketika mendeklarasikan dan menginisialisasi array seperti pada kode program di atas adalah, setiap “baris” harus memiliki jumlah “kolom” yang sama. Anda akan mendapatkan pesan eror “An array initializer of length ‘3’ is expected” apabila mendeklarasikan array seperti pada kode program di bawah ini.

int[,] duaDimensi =
{
    {1, 2, 3},  // Baris ke-0
    {4, 5},     // Baris ke-1
    {6, 7}      // Baris ke-2
};

Namun demikian, jumlah “baris” dan “kolom” tidak harus sama. Oleh karena itu, kode program di bawah ini merupakan deklarasi dan inisialisasi array yang valid di C#.

// Deklarasi tipe array dengan ukuran 2 x 3
int[,] duaDimensi =
{
    {1, 2, 3},  // Baris ke-0
    {4, 5, 6}   // Baris ke-1
};

Melakukan iterasi pada array multi-dimensi

Selanjutnya, Anda bisa melakukan iterasi pada array dua dimensi menggunakan perulangan for bersarang seperti kode program di bawah ini.

for (int i = 0; i < duaDimensi.GetLength(0); i++)
{
    for (int j = 0; j < duaDimensi.GetLength(1); j++)
    {
        Console.WriteLine($"Baris = {i}, kolom = {j}, nilai = {duaDimensi[i, j]}");
    }
}

/*
output:
Baris = 0, kolom = 0, nilai = 1
Baris = 0, kolom = 1, nilai = 2
Baris = 0, kolom = 2, nilai = 3
Baris = 1, kolom = 0, nilai = 4
Baris = 1, kolom = 1, nilai = 5
Baris = 1, kolom = 2, nilai = 6
Baris = 2, kolom = 0, nilai = 7
Baris = 2, kolom = 1, nilai = 8
Baris = 2, kolom = 2, nilai = 9
*/

Untuk mengiterasi array multi-dimensi, kita tidak bisa menggunakan properti Length untuk menentukan batas atas pengulangan. Kali ini kita menggunakan method GetLength() yang didefinisikan di class System.Array. Angka di dalam kurung merupakan indeks dari dimensi array. GetLength(0) akan mengembalikan ukuran “baris” (dimensi pertama), sedangkan GetLength(1) akan mengembalikan ukuran “kolom” (dimensi kedua).

Jagged Array Di C#

Seperti yang telah kita pelajari, array multi-dimensi tidak bisa memiliki jumlah “kolom” atau data yang berbeda-beda untuk setiap barisnya. Namun apabila kita memiliki data yang mengharuskan jumlah data pada tipa “baris”-nya berbeda-beda, C# menyediakan sebuah struktur data bernama jagged array.

Deklarasi dan inisialisasi jagged array bisa dilakukan seperti pada kode program di bawah ini.

// Deklarasi
int[][] jaggedArray = new int[3][];
// Inisialisasi
jaggedArray[0] = new int[2] { 1, 2 };
jaggedArray[1] = new int[6] { 3, 4, 5, 6, 7, 8 };
jaggedArray[2] = new int[3] { 9, 10, 11 };

Pada saat menentukan ukuran array jaggedArray yang kita deklarasikan, hanya ukuran “baris”-nya saja yang kita tentukan, sementara ukuran “kolom”-nya kita biarkan kosong (new int[3][]).

Ukuran tiap “kolom” baru akan kita tentukan pada saat menginisialisasi data untuk masing-masing “baris”.

Anda juga bisa melakukan iterasi pada array jaggedArray dengan konstruksi perulangan for seperti kode program di bawah ini.

// jaggedArray.Length menghasilkan nilai 3
for (int i = 0; i < jaggedArray.Length; i++)
{
    // nilai yang dihasilkan oleh jaggedArray[i].Length,
    // tergantung dari ukuran tiap-tiap baris pada indeks i 
    for (int j = 0; j < jaggedArray[i].Length; j++)
    {
        Console.Write($"{jaggedArray[i][j]} ");
    }
    Console.WriteLine();
}

/*
output:
1 2
3 4 5 6 7 8
9 10 11
*/

Penutup

Pada materi kali ini kita telah mempelajari bagaimana bekerja dengan tipe array di C#.

Di C#, kita bisa mendeklarasikan sebuah array sebagai array satu dimensi, multi-dimensi, dan jagged array.

Itu saja meteri kita kali ini. Jika Anda merasa kesulitan dalam memahami materi ini, jangan menyerah! Tulis kesulitan atau pertanyaan Anda di kolom komentar, saya akan membantu.

Selamat belajar!

Tinggalkan Balasan