6. Array dan String
Bab ini akan
kembali mendiskusikan mengenai tipe data, array dan string. Loop foreach juga
akan dibahas secara detil.
Array
Array adalah
sekumpulan variabel bertipe sama yang bisa dirujuk dengan nama sama. Dalam C#,
array dapat memiliki satu atau lebih dimensi. Array dipakai untuk berbagai
kepentingan karena banyak kasus melibatkan pengelompokan variabel-variabel
berelasi. Sebagai contoh, Anda bisa menggunakan array untuk menampung data suhu
bulanan, data harga saham, dan lainnya.
Keuntungan utama
dari array adalah ia mengorganisir data sedemikian rupa sehingga data dengan
mudah dapat dimanipulasi. Sebagai contoh, jika Anda mempunyai array yang memuat
data pendapatan tiap rumah tangga di sebuah desa, maka Anda dapat dengan mudah
mencari pendapatan rata-rata hanya dengan menjelajah array. Di samping itu,
array juga mengorganisir data sedemikian rupa sehingga data dapat dengan mudah
diurutkan.
Meskipun array
dalam C# dapat dipakai seperti array dalam banyak bahasa pemrograman,
perbedaannya adalah array dalam C# diimplementasikan sebagai objek. Inilah
alasan mengapa array dibahas setelah objek dikenalkan pada buku ini. Dengan
mengimplementasikan array sebagai objek, beberapa keuntungan bisa diperoleh,
salah satunya adalah bahwa array yang sudah tidak dipakai akan dikumpulkan oleh
kolektor sampah.
Array
Satu Dimensi
Array satu
dimensi adalah sebuah daftar yang memuat beberapa variabel berelasi. Daftar
semacam itu umum dijumpai dalam pemrograman. Sebagai contoh, Anda bisa memakai
array satu dimensi untuk menyimpan nomor akun pengguna di dalam sebuah
jaringan.
Karena array
dalam C# diimplementasikan sebagai objek, dua langkah dibutuhkan untuk
menggunakan array dalam program Anda. Pertama, Anda harus mendeklarasikan
sebuah variabel yang menunjuk ke array tersebut. Kedua, Anda harus menciptakan
sebuah instans dari array menggunakan operator new. Oleh karena itu, untuk mendeklarasikan sebuah array satu
dimensi, Anda akan menggunakan bentuk umum ini:
tipe[ ] nama-array = new tipe[ukuran];
Di sini, tipe mendeklarasikan
tipe elemen dari array. Tipe elemen menentukan tipe data setiap elemen yang
dimuat array. Perhatikan kurung siku yang mengikuti tipe. Kurung siku tersebut
mengindikasikan bahwa sebuah array satu dimensi sedang dideklarasikan. Jumlah
elemen yang bisa dimuat array ditentukan oleh ukuran.
Berikut adalah
contohnya. Statemen ini menciptakan sebuah array int yang beranggotakan 10 elemen dan menghubungkannya dengan
variabel referensi bernama sampel:
int[] sampel
= new int[10];
Variabel sampel menampung sebuah referensi yang
menunjuk ke memori yang dialokasikan oleh new.
Memori ini cukup besar untuk menampung sepuluh elemen bertipe int.
Sama seperti
kasus dalam menciptakan instans dari sebuah kelas, Anda dimungkinkan untuk
memecah statemen sebelumnya menjadi dua. Sebagai contoh,
int[]
sampel;
sampel = new int[10];
Pada kasus ini,
ketika sampel pertama kali
diciptakan, ia tidak merujuk ke objek fisik apapun. Variabel referensi sampel pada statemen kedua, setelah
dieksekusi, akan menunjuk ke sebuah array satu dimensi.
Elemen individu
di dalam sebuah array bisa diakses menggunakan indeks. Indeks mendeskripsikan
posisi elemen di dalam array. Dalam C#, semua array mempunyai 0 sebagai indeks
bagi elemen pertama. Karena sampel
mempunyai 10 elemen, indeksnya mulai dari 0 sampai 9. Untuk mengindeks sebuah
array, Anda perlu menspesifikasi jumlah elemen yang diinginkan, diapit oleh
sepasang kurung siku. Jadi, elemen pertama dalam sampel adalah sampel[0],
dan elemen terakhir adalah sampel[9].
Sebagai contoh, program berikut mengisi sampel
dengan angka 0 sampai 9:
// Demonstrasi array satu
dimensi.
using System;
class DemoArray {
static
void Main() {
int[]
sampel = new int[10];
int
i;
for
(i = 0; i < 10; i = i + 1)
sampel[i] = i;
for
(i = 0; i < 10; i = i + 1)
Console.WriteLine("sampel["
+ i + "]: " + sampel[i]);
}
}
Keluaran program
ditunjukkan di sini:
sampel[0]: 0
sampel[1]: 1
sampel[2]: 2
sampel[3]: 3
sampel[4]: 4
sampel[5]: 5
sampel[6]: 6
sampel[7]: 7
sampel[8]: 8
sampel[9]: 9
Secara
konseptual, array sampel tampak
seperti ini:
Array umum
dijumpai dalam pemrograman karena Anda dapat dengan mudah menangani sejumlah
besar variabel berelasi menggunakan array. Sebagai contoh, program berikut
mencari rerata dari sekelompok nilai yang disimpan dalam array nilai menggunakan loop for:
// Menghitung rerata dari
sekelompok nilai.
using System;
class Rerata {
static
void Main() {
int[]
nilai = new int[10];
int
rerata = 0;
nilai[0] = 99;
nilai[1] = 10;
nilai[2] = 100;
nilai[3] = 18;
nilai[4] = 78;
nilai[5] = 23;
nilai[6] = 63;
nilai[7] = 9;
nilai[8] = 87;
nilai[9] = 49;
for
(int i = 0; i < 10; i++)
rerata = rerata + nilai[i];
rerata = rerata / 10;
Console.WriteLine("Rerata: " + rerata);
}
}
Keluaran program
ditunjukkan di sini:
Rerata: 53
Menginisialisasi
Array
Pada program
sebelumnya, array nilai diberikan nilai secara manual, menggunakan sepuluh
statemen penugasan terpisah. Ada cara yang lebih baik untuk melakukan hal itu.
Array dapat diinisialisasi ketika diciptakan. Bentuk umum untuk
menginisialisasi sebuah array satu dimensi ditunjukkan di sini:
tipe[ ] nama-array = { nil1,
nil2, nil3, ..., nilN };
Di sini,
nilai-nilai awal dispesifikasi melalui nil1 sampai nilN. C# secara otomatis mengalokasikan
sebuah array yang cukup besar untuk menampung penginisialisasi yang Anda
spesifikasi. Tidak perlu digunakan operator new secara eksplisit. Sebagai contoh, berikut adalah cara lebih
baik untuk menulis program Rerata:
// Menghitung rerata dari
sekelompok nilai.
using System;
class Rerata
{
static
void Main()
{
int[]
nilai = { 99, 10, 100, 18, 78, 23,
63, 9, 87, 49 };
int
rerata = 0;
for
(int i = 0; i < 10; i++)
rerata = rerata + nilai[i];
rerata = rerata / 10;
Console.WriteLine("Rerata: " + rerata);
}
}
Anda dapat
menggunakan new ketika
menginisialisasi sebuah array. Sebagai contoh, berikut adalah cara yang benar,
meski berlebihan, untuk menginisialisasi nilai:
int[] nilai
= new int[] { 99, 10, 100, 18, 78, 23,
63, 9,
87, 49 };
Meskipun
berlebihan, format new dari
inisialisasi array berguna ketika Anda menugaskan sebuah array baru kepada
variabel referensi array yang sudah ada. Sebagai contoh:
int[] nilai;
nilai = new int[] { 99, 10, 100, 18, 78, 23,
63, 9, 87,
49 };
Pada kasus ini, nilai dideklarasikan pada statemen
pertama dan diinisialisasi oleh statemen kedua.
Satu hal penting
terakhir: Adalah diijinkan untuk menspesifikasi ukuran array secara eksplisit
ketika menginisialisasi sebuah array, tetapi ukurannya harus sesuai dengan
jumlah penginisialisasi. Sebagai contoh, berikut adalah cara lain dalam
menginisialisasi nilai:
int[] nilai
= new int[10] { 99, 10, 100, 18, 78, 23,
63, 9, 87, 49 };
Pada deklarasi
ini, ukuran dari nilai secara
eksplisit dinyatakan sebesar 10.
Batas
Array
Batas array
secara tegas diterapkan dalam C#; akan terjadi error jika melebihi batas array.
Jika Anda ingin memastikan hal ini, Anda bisa mencoba program berikut yang
mengakses ke luar batas array:
// Demonstrasi melebihi
batas array.
using System;
class ArrayErr {
static
void Main() {
int[]
sampel = new int[10];
int
i;
// Mengakses di luar batas array.
for
(i = 0; i < 100; i = i + 1)
sampel[i] = i;
}
}
Ketika i mencapai 10, IndexOutOfRangeException dibangkitkan dan program dihentikan secara
mendadak. (Lihat Bab 12 untuk diskusi tentang penanganan eksepsi).
Array
Multidimensi
Meskipun array
satu dimensi merupakan array yang paling umum dipakai dalam pemrograman, array
multidimensi tidak jarang pula digunakan. Array multidimensi merupakan array
mempunyai dua atau lebih dimensi, dan setiap elemen individu diakses dengan
kombinasi dari dua atau lebih indeks.
Array
Dua Dimensi
Bentuk paling
sederhana dari array multidimensi adalah array dua dimensi. Dalam array dua
dimensi, lokasi dari elemen tertentu dispesifikasi dengan dua indeks. Anda bisa
berimajinasi bahwa array dua dimensi seperti tabel informasi, dimana satu
indeks mengindikasikan baris dan indeks lainnya mengindikasikan kolom. Untuk
mendeklarasikan sebuah array integer dua dimensi, tabel, yang berukuran 10x20, Anda bisa menuliskan
int[,] tabel = new int[10, 20];
Perhatikan
secara khusus pada deklarasi tersebut. Perhatikan bahwa kedua dimensi
dipisahkan dengan koma. Pada bagian pertama dari deklarasi, sintaks
[,]
mengindikasikan
bahwa sebuah variabel referensi array dua dimensi sedang diciptakan. Agar
memori menggunakan new untuk array
dialokasikan, sintaks ini digunakan:
int[10, 20]
Ini menciptakan
sebuah array 10x20, dan koma memisahkan antar dimensi.
Untuk mengakses
sebuah elemen di dalam array dua dimensi, Anda harus menspesifikasi kedua
indeks yang dipisahkan dengan koma. Sebagai contoh, untuk menugaskan nilai 10
pada lokasi 3,5 pada array tabel,
Anda bisa menggunakan
tabel[3, 5] = 10;
Berikut
diberikan contoh utuh, yang mengisi sebuah array dua dimensi dengan angka 1
sampai 12 dan kemudian menampilkan isi array tersebut:
// Demonstrasi sebuah array
dua dimensi.
using System;
class DuaD {
static
void Main() {
int
t, i;
int[,]
tabel = new int[3, 4];
for
(t = 0; t < 3; ++t)
{
for (i = 0; i < 4; ++i)
{
tabel[t, i] = (t * 4) + i + 1;
Console.Write(tabel[t, i] + " ");
}
Console.WriteLine();
}
}
}
Pada contoh ini,
tabel[0, 0] akan memiliki nilai 1, tabel[0, 1] nilai 2, tabel[0, 3] nilai 3, dan seterusnya.
Nilai dari tabel[3, 2] adalah 12.
Secara konseptual, array akan tampak seperti yang ditunjukkan pada Gambar 6.1.
Gambar 6.1 Representasi konseptual atas array tabel yang diciptakan oleh program DuaD
Array
Tiga Atau Lebih Dimensi
C# mengijinkan
array memiliki lebih dari dua dimensi. Berikut adalah format umum deklarasi
sebuah array multidimensi:
tipe[, ...,] nama = new tape[ukuran1, ukuran2,
..., ukuranN];
Sebagai contoh,
deklarasi berikut menciptakan sebuah array integer tiga dimensi berukuran
4x10x3:
int[,,]
multidim = new int[4, 10, 3];
Untuk menugasi
elemen 2, 4, 1 dari multidim dengan nilai 100, gunakan statemen ini:
multidim[2, 4, 1] = 100;
Berikut adalah
sebuah program yang menggunakan sebuah array tiga dimensi yang menampung
matriks nilai 3x3x3. Program kemudian menjumlahkan nilai pada salah satu
diagonal kubik.
// Menujumlahkan nilai-nilai
pada sebuah diagonal matriks 3x3x3.
using System;
class Matriks3D {
static
void Main() {
int[,
,] m = new int[3, 3, 3];
int
jum = 0;
int
n = 1;
for
(int x = 0; x < 3; x++)
for (int y = 0; y <
3; y++)
for (int z = 0; z <
3; z++)
m[x, y, z] = n++;
jum = m[0, 0, 0] + m[1, 1, 1] + m[2, 2,
2];
Console.WriteLine("Penjumlahan atas diagonal: " +
jum);
}
}
Keluaran program
ditunjukkan di sini:
Penjumlahan atas diagonal: 42
Menginisialisasi
Array Multidimensi
Array
multidimensi dapat diinisialisasi dengan mengapit daftar penginisialisasi pada
tiap dimensi menggunakan kurung kurawal. Sebagai contoh, format umum
inisialisasi array dua dimensi ditunjukkan di sini:
tipe[,] nama_array = {
{ nil,
nil, nil, ..., nil },
{ nil,
nil, nil, ..., nil },
...
{ nil,
nil, nil, ..., nil }
};
Di sini, nil mengindikasikan
sebuah nilai inisialiasasi. Setiap blok sebelah dalam mengindikasikan sebuah
baris. Dalam setiap baris, nilai pertama disimpan pada posisi pertama, nilai
kedua pada posisi kedua, dan seterusnya. Perhatikan bahwa koma memisahkan blok
penginisialisasi dan bahwa titik koma ditempatkan setelah kurung kurawal
penutup }.
Sebagai contoh,
program berikut menginisialisasi sebuah array bernama kuadrat, yang menampilkan
setiap elemen dan kuadra dari tiap elemennya:
// Menginisialisasi array
dua dimensi.
using System;
class Kuadrat
{
static
void Main()
{
int[,]
kuadrat = {
{ 1, 1 },
{ 2, 4 },
{ 3, 9 },
{ 4, 16 },
{ 5, 25 },
{ 6, 36 },
{ 7, 49 },
{ 8, 64 },
{ 9, 81 },
{ 10, 100 }
};
int
i, j;
for
(i = 0; i < 10; i++)
{
for (j = 0; j < 2; j++)
Console.Write(kuadrat[i, j] + " ");
Console.WriteLine();
}
}
}
Keluaran program
ditunjukkan di sini:
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Array
Jagged
Pada beberapa
contoh sebelumnya, ketika Anda menciptakan sebuah array dua dimensi, Anda
menciptakan apa yang dinamakan dengan array persegi-panjang. Array
persegi-panjang seperti tabel, dimana panjang setiap baris sama. Namun, C# juga
mengijinkan Anda untuk menciptakan suatu tipe spesial dari array dua dimensi,
yang dikenal dengan array jagged. Array jagged merupakan array yang memuat
beberapa array, dimana di dalamnya panjang setiap array bisa berbeda satu sama
lain. Jadi, array jagged dapat dipakai untuk menciptakan tabel dimana di
dalamnya panjang baris tidak sama.
Array jagged
dideklarasikan menggunakan beberapa pasang kurung siku untuk mengindikasikan
setiap dimensi. Sebagai contoh, untuk mendeklarasikan sebuah array jagged dua
dimensi, Anda dapat menggunakan format umum ini:
tipe[ ] [ ] nama-array = new tipe[ukuran][
];
Di sini, ukuran
mengindikasikan jumlah baris di dalam array. Baris sendiri belum dialokasikan
dan dialokasikan secara individual. Ini memampukan Anda untuk menetapkan setiap
baris berbeda dari bari lainnya. Sebagai contoh, kode berikut mengalokasikan
memori untuk dimensi pertama array jagged ketika dideklarasikan. Kode kemudian
mengalokasikan dimensi kedua secara manual.
int[][]
jagged = new int[3][];
jagged[0] = new
int[4];
jagged[1] = new
int[3];
jagged[2] = new
int[5];
Setelah deret
statemen tersebut dieksekusi, array jagged
akan tampak seperti ini:
Begitu array
jagged diciptakan, elemennya dapat diakses dengan menspesifikasi setiap indeks
di dalam kurung siku. Sebagai contoh, untuk menugaskan nilai 10 kepada elemen
2,1 pada array jagged, Anda bisa
menggunakan statemen ini:
jagged[2][1] = 10;
Program berikut
mendemonstrasikan penciptaan sebuah array jagged dua dimensi:
// Demonstrasi array jagged.
using System;
class Jagged {
static
void Main() {
int[][]
jagged = new int[3][];
jagged[0] = new int[4];
jagged[1] = new int[3];
jagged[2] = new int[5];
int
i;
// Menyimpan nilai-nilai dalam array
pertama.
for(i=0;
i < 4; i++)
jagged[0][i] = i;
// Menyimpan nilai-nilai dalam array kedua.
for(i=0;
i < 3; i++)
jagged[1][i] = i;
// Menyimpan nilai-nilai dalam array
ketiga.
for
(i = 0; i < 5; i++)
jagged[2][i] = i;
// Menampilkan nilai-nilai pada array
pertama.
for
(i = 0; i < 4; i++)
Console.Write(jagged[0][i]
+ " ");
Console.WriteLine();
// Menampilkan nilai-nilai pada array
kedua.
for
(i = 0; i < 3; i++)
Console.Write(jagged[1][i]
+ " ");
Console.WriteLine();
// Menampilkan nilai-nilai pada array
ketiga.
for
(i = 0; i < 5; i++)
Console.Write(jagged[2][i]
+ " ");
Console.WriteLine();
}
}
Keluaran program
ditampilkan di sini:
0 1 2 3
0 1 2
0 1 2 3 4
Array jagged tidak
digunakan pada semua terapan, tetapi bisa efektif pada beberapa situasi.
Sebagai contoh, jika membutuhkan sebuah array dua dimensi yang berukuran sangat
besar, tetapi berpopulasi jarang, maka array jagged bisa menjadi solusi tepat.
Satu hal penting
terakhir: Karena array jagged adalah array yang memuat array, maka tidak ada
batasan bahwa array berupa array satu dimensi. Sebagai contoh, statemen berikut
menciptakan array yang memuat beberapa array dua dimensi:
int[][,]
jagged = new int[3][,];
Statemen
berikutnya menugaskan sebuah referensi yang menunjuk ke suatu array berukuran
4x2 kepada jagged[0]:
jagged[0] = new
int[4, 2];
Statemen berikut
menugaskan sebuah nilai kepada jagged[0][1]:
jagged[0][1,0] = i;
Menugaskan
Referensi Array
Sama seperti
objek lainnya, ketika Anda menugaskan variabel referensi array satu kepada
lainnya, Anda hanya membuat kedua variabel tersebut merujuk ke array yang sama.
Anda tidak menyebabkan penyalinan array, atau Anda juga tidak menyebabkan isi
dari satu array disalin ke array lain. Sebagai contoh, perhatikan program ini:
// Menugaskan variabel
referensi array.
using System;
class MenugaskanRef {
static
void Main() {
int
i;
int[]
angka1 = new int[10];
int[]
angka2 = new int[10];
for
(i = 0; i < 10; i++) angka1[i] = i;
for
(i = 0; i < 10; i++) angka2[i] = -i;
Console.Write("Berikut adalah angka1: ");
for
(i = 0; i < 10; i++)
Console.Write(angka1[i] + " ");
Console.WriteLine();
Console.Write("Berikut adalah angka2: ");
for
(i = 0; i < 10; i++)
Console.Write(angka2[i] + " ");
Console.WriteLine();
angka2 = angka1; // sekarang angka2
merujuk ke angka1
Console.Write("Berikut adalah angka2 setelah penugasan:
");
for
(i = 0; i < 10; i++)
Console.Write(angka2[i] + " ");
Console.WriteLine();
// Berikutnya, beroperasi pada angka1
melalui angka2.
angka2[3] = 99;
Console.Write("Berikut adalah angka1 setelah perubahan
lewat angka2: ");
for
(i = 0; i < 10; i++)
Console.Write(angka1[i]
+ " ");
Console.WriteLine();
}
}
Berikut adalah
keluaran program:
Berikut adalah angka1: 0 1 2 3 4 5 6 7 8 9
Berikut adalah angka2: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9
Berikut adalah angka2 setelah penugasan: 0 1 2 3 4 5 6 7 8 9
Berikut adalah angka1 setelah perubahan lewat angka2: 0 1 2
99 4 5 6 7 8 9
Seperti
ditunjukkan pada keluaran, setelah penugasan angka1 kepada angka1, kedua
variabel referensi merujuk ke objek yang sama.
Menggunakan
Properti Length
Sejumlah keuntungan
didapatkan karena C# mengimplementasikan array sebagai objek. Salah satu
keuntungan yang didapatkan berkaitan dengan properti Length yang memuat jumlah elemen yang dapat ditampung suatu array.
Berikut adalah sebuah program yang mendemonstrasikan properti ini:
// Menggunakan properti
Length.
using System;
class DemoLength
{
static
void Main()
{
int[]
angka = new int[10];
Console.WriteLine("Panjang array angka adalah " +
angka.Length);
// Menggunakan Length untuk
menginisialisasi angka.
for
(int i = 0; i < angka.Length;
i++)
angka[i] = i * i;
// Sekarang menggunakan Length untuk
menampilkan angka.
Console.Write("Berikut adalah array angka: ");
for
(int i = 0; i < angka.Length;
i++)
Console.Write(angka[i] + " ");
Console.WriteLine();
}
}
Program ini
menampilkan keluaran berikut:
Panjang array angka adalah 10
Berikut adalah array angka: 0 1 4 9 16 25 36 49 64 81
Dalam DemoLength, perhatikan cara dimana angka.Length digunakan oleh beberapa
loop for dalam mengatur jumlah
iterasi yang akan dilakukan. Karena setiap array membawa panjangnya sendiri,
Anda bisa menggunakan informasi ini, daripada harus secara manual menjejak
ukuran array. Ingat bahwa nilai dari Length
tidak ada hubungannya dengan jumlah elemen aktual yang sedang digunakan. Length memuat jumlah elemen yang
mampung ditampung oleh sebuah array.
Total jumlah
elemen juga bisa dijadikan nilai balik. Sebagai contoh:
// Mengunakan properti array
Length pada array 3D.
using System;
class DemoPanjang3D {
static
void Main() {
int[,
,] angka = new int[10, 5, 6];
Console.WriteLine("Panjang array angka adalah " +
angka.Length);
}
}
Program ini
menampilkan keluaran berikut:
Panjang array angka adalah 300
Seperti
dibuktikan pada keluaran, Length
mendapatkan jumlah elemen yang dapat ditampung oleh array angka, yaitu 300
(10x5x6) pada kasus ini. Anda tidak dimungkinkan untuk menggunakan Length dalam mencari panjang dari
dimensi tertentu.
Penggunaan
properti Length dapat
menyederhanakan banyak algoritma. Sebagai contoh, program berikut menggunakan Length untuk membalikkan isi sebuah
array dengan menyalinnya dari belakang-ke-depan ke dalam array lain:
// Membalikkan sebuah array.
using System;
class SalinBalik {
static
void Main() {
int
i, j;
int[]
angka1 = new int[10];
int[]
angka2 = new int[10];
for
(i = 0; i < angka1.Length; i++) angka1[i] = i;
Console.Write("Isi awal: ");
for
(i = 0; i < angka1.Length; i++)
Console.Write(angka1[i] + " ");
Console.WriteLine();
// Menyalin secara terbalik dari angka1
ke angka2.
if
(angka2.Length >= angka1.Length) // memastikan angka2 cukup besar
for (i = 0, j = angka1.Length - 1; i < angka1.Length; i++, j--)
angka2[j] = angka1[i];
Console.Write("Isi terbalik: ");
for
(i = 0; i < angka2.Length; i++)
Console.Write(angka2[i] + " ");
Console.WriteLine();
}
}
Berikut adalah
keluaran program:
Isi awal: 0 1 2 3 4 5 6 7 8 9
Isi terbalik: 9 8 7 6 5 4 3 2 1 0
Di sini, Length membantu dua fungsi penting.
Pertama, Length dipakai untuk
memastikan bahwa array target cukup besar dalam menampung isi array sumber.
Kedua, Length menyediakan kondisi
terminasi untuk loop for, yang
melakukan penyalinan terbalik.
Menggunakan
Length Dengan Array Jagged
Kasus khusus
terjadi ketika Length dipakai pada
array jagged. Pada situasi ini, dimungkinkan untuk mendapatkan panjang dari
setiap array individual. Sebagai contoh, perhatikan program berikut, yang
mensimulasikan aktifitas CPU pada sebuah jaringan dengan empat simpul:
// Demonstrasi Length pada
array jagged.
using System;
class Jagged {
static
void Main() {
int[][]
simpul_jaringan = new int[4][];
simpul_jaringan[0] = new int[3];
simpul_jaringan[1] = new int[7];
simpul_jaringan[2] = new int[2];
simpul_jaringan[3] = new int[5];
int
i, j;
// fabrikasi CPU.
for
(i = 0; i < simpul_jaringan.Length; i++)
for (j = 0; j < simpul_jaringan[i].Length; j++)
simpul_jaringan[i][j] = i * j +
70;
Console.WriteLine("Total jumlah simpul jaringan: " +
simpul_jaringan.Length + "\n");
for
(i = 0; i < simpul_jaringan.Length; i++)
{
for
(j = 0; j < simpul_jaringan[i].Length; j++)
{
Console.Write("penggunaan
CPU pada simpul " + i +
" CPU " + j + ": ");
Console.Write(simpul_jaringan[i][j] + "% ");
Console.WriteLine();
}
Console.WriteLine();
}
}
}
Keluaran program
ditunjukkan di sini:
Total jumlah
simpul jaringan: 4
penggunaan CPU pada simpul 0 CPU 0: 70%
penggunaan CPU pada simpul 0 CPU 1: 70%
penggunaan CPU pada simpul 0 CPU 2: 70%
penggunaan CPU pada simpul 1 CPU 0: 70%
penggunaan CPU pada simpul 1 CPU 1: 71%
penggunaan CPU pada simpul 1 CPU 2: 72%
penggunaan CPU pada simpul 1 CPU 3: 73%
penggunaan CPU pada simpul 1 CPU 4: 74%
penggunaan CPU pada simpul 1 CPU 5: 75%
penggunaan CPU pada simpul 1 CPU 6: 76%
penggunaan CPU pada simpul 2 CPU 0: 70%
penggunaan CPU pada simpul 2 CPU 1: 72%
penggunaan CPU pada simpul 3 CPU 0: 70%
penggunaan CPU pada simpul 3 CPU 1: 73%
penggunaan CPU pada simpul 3 CPU 2: 76%
penggunaan CPU pada simpul 3 CPU 3: 79%
penggunaan CPU pada simpul 3 CPU 4: 82%
Perhatikan
secara khusus tentang bagaimana Length dipakai pada array jagged, simpul_jaringan. Ingat, array jagged
dua dimensi merupakan sebuah array yang memuat array. Jadi, ketika ekspresi
simpul_jaring.Length
digunakan, ekspresi
tersebut mendapatkan jumlah array yang disimpan pada simpul_jaringan, yaitu
bernilai empat pada kasus ini. Untuk mendapatkan panjang dari sembarang array
individual pada array jagged, Anda bisa menggunakan ekspresi semacam ini:
simpul_jaring
[0].Length
dimana, pada
kasus ini, mendapatkan panjang dari array pertama.
Array
Bertipe Implisit
Seperti yang
telah dijelaskan pada Bab 2, C# 3.0 telah menambahkan kemampuan untuk
mendeklarasikan variabel secara implisit menggunakan katakunci var. Tipe variabel semacam itu
ditentukan oleh kompiler, bergantung pada tipe dari ekspresi penginisialisasian.
Jadi, semua variabel bertipe implisit harus diinisialisasi. Menggunakan
mekanisme yang sama, dimungkinkan untuk menciptakan array bertipe implisit.
Array bertipe implisit digunakan pada kasus yang melibatkan LINQ.
Array bertipe
implisit dideklarasikan menggunakan katakunci var, tetapi Anda tidak memberikan [ ] setelah var. Di samping itu, array semacam ini harus diinisialisasi karena
tipe penginisialisasi berperan sebagai penentu tipe elemen array tersebut.
Semua penginisialisasi harus bertipe sama atau bertipe kompatibel. Berikut
adalah sebuah contoh dari sebuah array bertipe implisit:
var nilai = new[] { 1, 2, 3,
4, 5 };
Statemen ini
menciptakan array int yang memuat
lima elemen. Referensi yang menunjuk ke array tersebut ditugaskan kepada nilai. Jadi, tipe dari nilai adalah “array int” dan mempunyai lima elemen.
Perhatikan bahwa var tidak diikuti
dengan [ ]. Di samping itu, meskipun array sedang diinisialisasi, Anda harus
mencantumkan new[ ]. Pencantuman ini
tidak bersifat konteks pada kasus ini. Berikut adalah contoh lain, yang
menciptakan sebuah array double dua
dimensi:
var nilai = new[,] { {1.1,
2.2}, {3.3, 4.4},{ 5.5, 6.6} };
Pada kasus ini, nilai mempunyai dimensi 2x3.
Anda juga dapat
mendeklarasikan array jagged bertipe implisit. Sebagai contoh, perhatikan
program berikut:
// Demonstrasi array jagged
bertipe implisit.
using System;
class Jagged {
static
void Main() {
var
jagged = new[] {
new[] { 1, 2, 3, 4 },
new[] { 9, 8, 7 },
new[] { 11, 12, 13, 14, 15 }
};
for
(int j = 0; j < jagged.Length;
j++)
{
for (int i = 0; i <
jagged[j].Length; i++)
Console.Write(jagged[j][i] + " ");
Console.WriteLine();
}
}
}
Program ini
menghasilkan keluaran:
1 2 3 4
9 8 7
11 12 13 14 15
Perhatikan
secara khusus pada deklarasi dari jagged:
var jagged = new[] {
new[]
{ 1, 2, 3, 4 },
new[]
{ 9, 8, 7 },
new[]
{ 11, 12, 13, 14, 15 }
Perhatikan
bagaimana new[ ] digunakan dalam dua
cara. Pertama, ia menciptakan array yang memuat array. Kedua, ia menciptakan
setiap array individual, berdasar pada jumlah dan tipe penginisialisasi.
Seperti yang Anda harapkan, semua penginisialisasi pada array individual harus
bertipe sama. Pendekatan ini dapat dipakai untuk mendeklarasikan sembarang
array jagged bertipe implisit.
Loop
foreach
Pada Bab 4,
telah disebutkan bahwa C# mendefinisikan sebuah loop yang dinamakan foreach, tetapi diskusi dan penjelasan
mengenai foreach dilakukan sekarang.
Loop foreach dipakai untuk menjelajah elemen-elemen dari sebuah koleksi.
Koleksi merupakan sekelompok objek. C# mendefinisikan beberapa tipe koleksi,
salah satunya adalah array. Format umum dari foreach ditunjukkan di sini:
foreach(tipe loopvar in koleksi)
statemen;
Di sini, tipe loopvar menspesifikasi
tipe dan nama dari variabel iterasi. Variabel iterasi menerima nilai dari
elemen berikutnya di dalam koleksi setiap kali loop foreach beriterasi. Koleksi yang sedang dijelajah dispesifikasi
oleh koleksi, dimana, pada
diskusi ini, adalah sebuah array. Jadi, tipe harus bertipe sama (kompatibel dengan)
tipe elemen array. tipe dapat pula berupa var, dimana di dalamnya kompiler
menentuka tipe berdasar pada tipe elemen array.
Berikut adalah
bagaimana foreach bekerja. Ketika
loop mulai dieksekusi, elemen pertama di dalam array didapatkan dan ditugaskan
kepada loopvar. Setiap iterasi mendapatkan elemen berikutnya dari array
dan menyimpannya di dalam loopvar. Loop berakhir ketika tidak ada lagi elemen yang didapatkan.
Jadi, foreach beriterasi menjelajahi
array elemen demi elemen, mulai awal sampai akhir.
Satu hal penting
untuk diingat tentang foreach adalah
bahwa variabel iterasi loopvar hanya bisa dibaca (read-only). Ini berarti
bahwa Anda tidak bisa mengubah isi sebuah array dengan menugaskan sebuah nilai
baru kepada variabel iterasi.
Berikut adalah
contoh sederhana yang menggunakan foreach.
Program ini menciptakan array integer dan menginisialisasinya. Program kemudian
menampilkan isi array dan menghitung penjumlahan atas isi array.
// Menggunakan loop foreach.
using System;
class DemoForeach {
static
void Main() {
int
jum = 0;
int[]
nilai = new int[10];
// Menginisialisasi array nilai.
for
(int i = 0; i < 10; i++)
nilai[i] = i;
// Menggunakan foreach untuk
menampilkan dan menjumlahkan isi array.
foreach
(int x in nilai)
{
Console.WriteLine("Nilai
adalah: " + x);
jum += x;
}
Console.WriteLine("Penjumlahan: " + jum);
}
}
Keluaran program
ditampilkan di sini:
Nilai adalah: 0
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Nilai adalah: 6
Nilai adalah: 7
Nilai adalah: 8
Nilai adalah: 9
Penjumlahan: 45
Seperti
ditunjukkan pada keluaran, foreach
menjelajah sebuah array secara berurutan dari indeks terendah sampai indeks
tertinggi. Meskipun loop foreach
beriterasi sampai semua elemen di dalam suatu array dijelajahi, adalah hal yang
memungkinkan untuk menghentikan loop foreach
secara mendadak menggunakan statemen break.
Sebagai contoh, program ini menjumlahkan hanya lima elemen pertama dari array nilai:
// Menggunakan break dalam
loop foreach.
using System;
class DemoForeach {
static
void Main() {
int
jum = 0;
int[]
nilai = new int[10];
// Menginisialisasi array nilai.
for
(int i = 0; i < 10; i++)
nilai[i] = i;
// Menggunakan foreach untuk
menampilkan dan menjumlahkan isi array.
foreach
(int x in nilai)
{
Console.WriteLine("Nilai
adalah: " + x);
jum += x;
if (x == 4) break; // menghentikan
loop ketika 4 didapatkan
}
Console.WriteLine("Penjumlahan dari 5 elemen pertama:
" + jum);
}
}
Berikut adalah
keluaran program:
Nilai adalah: 0
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Penjumlahan dari 5 elemen pertama: 10
Terbukti bahwa
loop foreach berhenti saat elemen
kelima diraih. Loop foreach juga
bisa diterapkan pada array multidimensi:
// Menggunakan foreach pada
array multidimensi.
using System;
class DemoForeach2 {
static
void Main() {
int
jum = 0;
int[,]
nilai = new int[3,5];
// Menginisialisasi array nilai.
for
(int i = 0; i < 3; i++)
for
(int j = 0; j < 5; j++)
nilai[i, j] = (i + 1) * (j + 1);
// Menggunakan foreach untuk menampilkan
dan menjumlahkan isi array.
foreach
(int x in nilai)
{
Console.WriteLine("Nilai adalah: " + x);
jum += x;
}
Console.WriteLine("Penjumlahan: " + jum);
}
}
Keluaran program
ditampilkan di sini:
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Nilai adalah: 2
Nilai adalah: 4
Nilai adalah: 6
Nilai adalah: 8
Nilai adalah: 10
Nilai adalah: 3
Nilai adalah: 6
Nilai adalah: 9
Nilai adalah: 12
Nilai adalah: 15
Penjumlahan: 90
Karena loop foreach hanya dapat menjelajah array
secara sekuensial, dari awal sampai akhir, Anda mungkin berpikir kegunaan loop
ini terbatas. Namun, hal itu salah. Banyak algoritma yang memerlukan mekanisme
ini, salah satunya adalah pencarian. Sebagai contoh, program berikut
menggunakan loop foreach untuk
melakukan pencarian sebuah nilai di dalam array. Program berhenti jika nilai
yang dicari ditemukan.
// Pencarian array
menggunakan foreach.
using System;
class Search {
static
void Main() {
int[]
nilai = new int[10];
int
nil;
bool
ditemukan = false;
// Menginisialisasi nilai.
for(int i = 0; i < 10; i++)
nilai[i] = i;
nil = 5;
// Menggunakan foreach untuk mencari kunci
pada nilai.
foreach (int x in nilai)
{
if
(x == nil)
{
ditemukan = true;
break;
}
}
if
(ditemukan)
Console.WriteLine("Nilai ditemukan!");
}
}
Keluaran program
ditunjukkan di sini:
Nilai ditemukan!
String
Dari sudut
pandang pemrograman, string merupakan salah satu tipe data terpenting dalam C#
karena mendefinisikan dan mendukung string karakter. Dalam banyak bahasa
pemrograman, string merupakan sebuah array karakter. Ini tidak terjadi pada C#.
Dalam C#, string adalah objek. Jadi string
bertipe referensi. Meskipun string
merupakan salah satu tipe built-in dalam C#, diskusi tentang string harus
disajikan setelah kelas dan objek dibahas.
Sebenarnya, Anda
telah menggunakan kelas string sejak
Bab 1, tetapi Anda tidak mengenalinya. Ketika Anda menciptakan sebuah literal
string, Anda sebenarnya sedang menciptakan suatu objek string. Sebagai contoh, di dalam statemen
Console.WriteLine("Dalam
C#, string adalah objek.");
string ”Dalam
C#, string adalah objek” secara otomatis dijadikan sebuah objek string oleh C#. Jadi, Anda telah
menggunakan string tanpa Anda sadari sejauh ini. Pada bagian ini, Anda akan
belajar bagaimana menangani string secara eksplisit.
Menciptakan
String
Cara termudah
dalam menciptakan sebuah string
adalah menggunakan literal string. Sebagai contoh, str berikut adalah suatu variabel referensi string yang ditugasi
dengan sebuah referensi yang menunjuk ke literal string:
string str =
"string C# sangat ampuh.";
Pada kasus ini, str diinisialisasi dengan runtun
karakter “string C# sangat ampuh”. Anda juga dapat menciptakan sebuah string dari array char. Sebagai contoh,
char[]
charray = {'t', 'e', 's', 't'};
string str = new
string(charray);
Begitu Anda
menciptakan sebuah objek string,
Anda dapat menggunakannya dimana saja sebuah string terkutip diijinkan. Sebagai
contoh, Anda dapat menggunakan sebuah objek string sebagai argumen bagi WriteLine(),
seperti ditunjukkan pada contoh ini:
// Mengenalkan string.
using System;
class DemoString {
static
void Main() {
char[]
charray = { '1', ' ', 's', 't', 'r', 'i', 'n', 'g', '.' };
string
str1 = new string(charray);
string
str2 = "String lain.";
Console.WriteLine(str1);
Console.WriteLine(str2);
}
}
Keluaran program
ditunjukkan di sini:
1 string.
String lain.
Metode
|
Deskripsi
|
static int Compare(string strA, string
strB,
StringComparison tipePerbandingan)
|
Menghasilkan
nilai balik kurang dari nol jika strA kurang dari strB, lebih dari nol jika
strA lebih besar dari strB, dan nol jika kedua string sama. Bagaimana
komparasi dilakukan dispesifikasi oleh tipePerbandingan.
|
bool Equals(string nilai,
StringComparison tipePerbandingan)
|
Menghasilkan
nilai balik true jika string pemanggil sama dengan nilai. Bagaimana
komparasi dilakukan dispesifikasi oleh tipePerbandingan.
|
int IndexOf(char nilai)
|
Melakukan
pencarian atas kemunculan pertama karakter yang dispesifikasi oleh nilai dalam string
pemanggil. Pencarian ordinal adalah pendekatan yang dipakai. Indeks dari
kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika
tidak ditemukan kecocokan.
|
int IndexOf(string nilai,
StringComparison tipePerbandingan)
|
Melakukan
pencarian atas kemunculan pertama substring yang dispesifikasi oleh nilai dalam string
pemanggil. Bagaimana komparasi dilakukan dispesifikasi oleh tipePerban-dingan. Indeks dari
kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika
tidak ditemukan kecocokan.
|
int LastIndexOf(char nilai)
|
Melakukan
pencarian atas kemunculan terakhir karakter yang dispesifikasi oleh nilai dalam string
pemanggil. Pencarian ordinal adalah pendekatan yang dipakai. Indeks dari
kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika
tidak ditemukan kecocokan.
|
int LastIndexOf(string nilai,
StringComparison tipePerbandingan)
|
Melakukan
pencarian atas kemunculan terakhir substring yang dispesifikasi oleh nilai dalam string
pemanggil. Bagaimana komparasi dilakukan dispesifikasi oleh tipePerban-dingan. Indeks dari
kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika
tidak ditemukan kecocokan.
|
string ToLower(
CultureInfo.CurrentCulture kultur)
|
Menghasilkan
versi huruf kecil dari string pemanggil. Bagaimana konversi dilakukan
dispesifikasi oleh kultur.
|
string ToUpper(
CultureInfo.CurrentCulture kultur)
|
Menghasilkan
versi huruf besar dari string pemanggil. Bagaimana konversi dilakukan
dispesifikasi oleh kultur.
|
Tabel 6.1 Beberapa metode pada kelas string
Operasi
Pada String
Kelas string memuat beberapa metode yang bisa
diterapkan pada string. Tabel 6.1 menampilkan beberapa metode tersebut.
Perhatikan bahwa sebagian metode mengambil sebuah parameter bertipe StringComparison. Tipe ini merupakan
tipe enumerasi yang mendefinisikan berbagai nilai yang menentukan bagaimana
perbandingan string dilakukan. (Enumerasi akan dijelaskan pada Bab 11). Seperti
yang Anda tebak, ada berbagai cara dalam membandingkan dua string. Sebagai
contoh, dua string dapat dibandingkan berdasarkan nilai biner pada karakter
yang membentuk kedua string tersebut. Hal ini dikenal dengan perbandingan
ordinal. String juga dapat dibandingkan dengan melibatkan metrik kultur,
seperti urutan kamus. Tipe perbandingan ini dinamakan sensitif-kultur. Meskipun
metode-metode seperti Compare(), Equals(), IndexOf(), dan LastIndexOf()
dapat dipakai untuk perbandingan default, semuanya juga bisa dipakai dengan
menspesifikasi secara eksplisit tipe perbandingan yang Anda inginkan.
Secara umum, dan
dengan beberapa pengecualian, jika Anda ingin membandingkan dua string secara
kultural (urutan kamus), Anda bisa menggunakan StringComparison.CurrentCulture. Jika Anda ingin membandingkan dua
string berbasis nilai karakter, Anda bisa menggunakan StringComparison.Ordinal. Untuk mengabaikan perbedaan huruf besar
dan huruf kecil, Anda bisa menggunakan StringComparison.CurrentCultureIgnoreCase
atau StringComparison.-OrdinalIgnoreCase.
Perhatikan bahwa
pada Tabel 6.1, Compare()
dideklarasikan sebagai static.
Pemodifikasi static dideskripsikan
pada Bab 7, tetapi secara singkat akan dijelaskan di sini. Pemodifikasi static ini berarti bahwa Compare() dipanggil dengan nama
kelasnya, bukan dengan instans dari kelasnya. Jadi, untuk memanggil Compare(), Anda akan menggunakan format
ini:
hasil = string.Compare(str1, str2,
bagaimana);
dimana bagaimana menspesifikasi
pendekatan perbandingan string.
Perhatikan juga
dua metode ToUpper() dan ToLower(), yang membuat string menjadi
huruf besar atau huruf kecil. Kedua metode mempunyai parameter CultureInfo. Kelas CultureInfo mendeskripsikan atribut kultural yang akan dipakai
untuk konversi. Beberapa contoh pada buku ini akan menggunakan pengaturan
kultur sekarang. Pengaturan ini dilakukan dengan melewatkan CultureInfo.CurrentCulture.
Untuk
mendapatkan nilai dari sebuah karakter individual pada suatu string, Anda hanya
perlu menggunakan indeks. Sebagai contoh:
string str =
"test";
Console.WriteLine(str[0]);
menampilkan “t”,
karakter pertama dari “test”. Seperti array, indeks string dimulai dari nol.
Satu hal penting adalah bahwa Anda tidak dapat menugaskan nilai baru pada
sebuah karakter di dalam string menggunakan indeks. Indeks hanya bisa dipakai
untuk mendapatkan karakter.
Anda dapat
menggunkaan operator == untuk
menguji ekualitas dari dua string. Normalnya, ketika operator == diterapkan
pada referensi objek, operator itu menentukan apakah kedua referensi menunjuk
objek yang sama. Ini berbeda jika objek yang akan dibandingkan bertipe string. Ketika == diterapkan pada dua
referensi string, isi kedua string dibandingkan ekualitasnya. Hal
ini berlaku pula untuk operator !=: ketika membandingkan objek string, isi
kedua string yang dibandingkan.
Untuk menguji ekualitas dua string menggunakan informasi kultural, Anda bisa
menggunakan Equals() dan
menspesifikasi pendekatan perbandingan, seperti StringComparison.CurrentCulture. Hal penting lainnya: metode Compare() dimaksudkan untuk
membandingkan string dengan relasi pengurutan.
Berikut adalah
sebuah program yang mendemonstrasikan beberapa operasi string:
// Beberapa operasi string.
using System;
using System.Globalization;
class StrOps {
static void Main() {
string str1 =
"Untuk pemrograman .NET, C# adalah
#1.";
string str2 =
"Untuk pemrograman .NET, C# adalah
#1.";
string str3 =
"string C# sangat tangguh.";
string strAtas,
strBawah;
int hasil, idx;
Console.WriteLine("str1: " + str1);
Console.WriteLine("Panjang str1: " + str1.Length);
// Menciptakan versi huruf besar/kecil dari
str1.
strBawah =
str1.ToLower(CultureInfo.CurrentCulture);
strAtas =
str1.ToUpper(CultureInfo.CurrentCulture);
Console.WriteLine("Versi huruf kecil dari str1:\n " +
strBawah);
Console.WriteLine("Versi huruf besar dari str1:\n " +
strAtas);
Console.WriteLine();
// Menampilkan
str1, karakter demi karakter.
Console.WriteLine("Menampilkan str1, char demi char.");
for(int i=0; i < str1.Length; i++)
Console.Write(str1[i]);
Console.WriteLine("\n");
// Membandingkan
string menggunakan == dan !=. Perbandigan ordinal.
if (str1 == str2)
Console.WriteLine("str1 == str2");
else
Console.WriteLine("str1 != str2");
if (str1 == str3)
Console.WriteLine("str1 == str3");
else
Console.WriteLine("str1 != str3");
// Perbandingan ini
sensitif-kultur.
hasil =
string.Compare(str1, str3, StringComparison.CurrentCulture);
if (hasil == 0)
Console.WriteLine("str1 dan str3 sama");
else if (hasil < 0)
Console.WriteLine("str1 kurang dari str3");
else
Console.WriteLine("str1 lebih besar dari str3");
Console.WriteLine();
// Menugaskan
string baru ke str2.
str2 = "Satu Dua Tiga Satu";
// Pencarian
string.
idx =
str2.IndexOf("Satu",
StringComparison.Ordinal);
Console.WriteLine("Indeks kemunculan pertama dari Satu:
" + idx);
idx =
str2.LastIndexOf("Satu",
StringComparison.Ordinal);
Console.WriteLine("Indeks kemunculan terakhir dari Satu:
" + idx);
}
}
Keluaran program
ditampilkan di sini:
str1: Untuk pemrograman .NET, C# adalah #1.
Panjang str1: 37
Versi huruf kecil dari str1:
untuk pemrograman
.net, c# adalah #1.
Versi huruf besar dari str1:
UNTUK PEMROGRAMAN
.NET, C# ADALAH #1.
Menampilkan str1, char demi char.
Untuk pemrograman .NET, C# adalah #1.
str1 == str2
str1 != str3
str1 lebih besar dari str3
Indeks kemunculan pertama dari Satu: 0
Indeks kemunculan terakhir dari Satu: 14
Pada program
perhatikan bahwa Compare() dipanggil
di sini:
hasil = string.Compare(str1, str3, StringComparison.CurrentCulture);
Seperti yang
telah dijelaskan, karena Compare
dideklarasikan static, ia dipanggil
dengan nama kelasnya, bukan nama instans dari kelasnya. Anda bisa menyambungkan
dua string menggunakan operator +. Sebagai contoh, statemen ini
string str1 = "Satu";
string str2 = "Dua";
string str3 = "Tiga";
string str4 = str1 + str2 + str3;
menginisialisasi
str4 dengan string “SatuDuaTiga”.
Satu hal penting
lainnya: Katakunci string merupakan
alias bagi kelas System.String yang
didefinisikan oleh pustaka kelas Framework .NET. Jadi, bidang data dan metode
yang didefinisikan oleh string adalah dari kelas System.String.
Array
String
Seperti tipe
data lain, string dapat dimuat di dalam array. Sebagai contoh:
// Demonstrasi array string.
using System;
class StringArray {
static
void Main() {
string[] str = { "Ini", "adalah", "sebuah",
"test." };
Console.WriteLine("Array asli: ");
for
(int i = 0; i < str.Length; i++)
Console.Write(str[i] + " ");
Console.WriteLine("\n");
// Mengubah string.
str[1] = "merupakan";
str[3] = "test, juga!";
Console.WriteLine("Array
termodifikasi: ");
for
(int i = 0; i < str.Length; i++)
Console.Write(str[i] + " ");
}
}
Berikut adalah
keluaran yang dihasilkan program:
Array asli:
Ini adalah sebuah test.
Array termodifikasi:
Ini merupakan sebuah test, juga!
Berikut
disajikan sebuah contoh yang lebih menarik. Program berikut menampilkan suatu
nilai integer menggunakan kata. Sebagai contoh, nilai 19 akan ditampilkan
sebagai “satu sembilan”.
// Menampilkan dijit dalam
kata.
using System;
class KonversiDijitKeKata {
static
void Main() {
int
angka;
int
dijitBerikutnya;
int
jumlahDijit;
int[]
n = new int[20];
string[] dijit = { "nol", "satu", "dua",
"tiga", "empat", "lima",
"enam", "tujuh", "delapan",
"sembilan" };
angka = 1908;
Console.WriteLine("Angka: " + angka);
Console.Write("Angka dalam kata: ");
dijitBerikutnya = 0;
jumlahDijit = 0;
// Mendapatkan dijit individual dan
menyimpannya dalam n.
// Dijit-dijit ini disimpan dalam
urutan terbalik.
do
{
dijitBerikutnya = angka % 10;
n[jumlahDijit] = dijitBerikutnya;
jumlahDijit++;
angka = angka / 10;
} while
(angka > 0);
jumlahDijit--;
// Menampilkan kata.
for
(; jumlahDijit >= 0; jumlahDijit--)
Console.Write(dijit[n[jumlahDijit]] + " ");
Console.WriteLine();
}
}
Keluaran program
ditampilkan di sini:
Angka: 1908
Angka dalam kata: satu sembilan nol delapan
Pada program,
array string dijit menampung
kata-kata yang ekivalen dengan dijit nol sampai sembilan. Program mengkonversi sebuah integer menjadi kata-kata
dengan pertama-tama mendapatkan setiap dijit dari nilai dan menyimpan
dijit-dijit tersebut degan urutan terbalik di dalam array int, n.
String
Immutable
Isi suatu string
immutable. Begitu diciptakan, runtun karakter di dalam string tidak dapat
diubah. Jika Anda memerlukan sebuah string yang perlu divariasi atau diubah,
Anda hanya perlu menciptakan sebuah string baru yang memuat perubahan yang
diinginkan. Karena objek string yang tidak lagi digunakan secara otomatis
dikoleksi oleh kolektor sampah, Anda tidak perlu khawatir tentang apa yang
terjadi dengan string yang dibuang.
Tentu saja, Anda
perlu memahami bahwa variabel referensi string
dapat mengubah objek mana yang ditunjuk olehnya. Yang tidak bisa diubah adalah
isi dari objek string.
Untuk memahami
mengapa string tidak bisa diubah (immutable), berikut diberikan satu metode
string: Substring(). Metode Substring() menghasilkan nilai balik
berupa sebuah string baru yang memuat penggalan tertentu dari string pemanggil.
String asli tidak berubah. Format dari Substring()
yang digunakan di sini adalah:
string
Substring(int indeksAwal, int panjang)
Di sini, indeksAwal menspesifikasi
indekas awal, dan panjang menspesifikasi panjang substring. Berikut merupakan sebuah
program yang mendemonstrasikan metode Substring():
// Menggunakan Substring().
using System;
class SubStr {
static
void Main() {
string
stringawal = "C# membuat string
mudah.";
// Menciptakan sebuah substring.
string
substr = stringawal.Substring(5, 12);
Console.WriteLine("stringawal: " + stringawal);
Console.WriteLine("substring: " + substr);
}
}
Berikut adalah
keluaran program:
stringawal: C# membuat string mudah.
substring: mbuat string
Seperti yang
dapat Anda lihat, stringawal tidak
berubah, dan substr memuat substring
yang diinginkan.
Satu lagi hal
penting: Meskipun isi objek string
tidak bisa diubah, tetapi ada beberapa situasi dimana Anda perlu mengubah atau
memodifikasi sebuah string. Untuk melakukan hal ini, C# menawarkan sebuah kelas
yang dikenal dengan StringBuilder,
yang berada dalam namespace System.Text.
Kelas ini menciptakan objek string yang bisa dimodifikasi. Namun, pada banyak
kasus, Anda hanya perlu string,
bukan StringBuilder.
String
Dapat Digunakan Dalam Statemen switch
Sebuah string dapat dipakai untuk
mengendalikan statemen switch. Ini
merupakan satu-satunya tipe tak-integer yang dapat digunakan di dalam switch. Sebagai contoh, progam berikut
menampilkan dijit ekivalen dari kata “satu”, “dua”, dan “tiga”.
// String dapat
mengendalikan statemen switch.
using System;
class StringSwitch {
static
void Main() {
string[]
str = { "satu", "dua", "tiga", "dua",
"satu" };
foreach
(string s in str)
{
switch (s)
{
case "satu":
Console.Write(1);
break;
case "dua":
Console.Write(2);
break;
case "tiga":
Console.Write(3);
break;
}
}
Console.WriteLine();
}
}
Program
menghasilkan keluaran ini:
12321
No comments:
Post a Comment