Koleksi
.NET Framework menyediakan serangkaian tipe standar untuk menyimpan dan mengelola koleksi
objek. Ini termasuk daftar yang dapat diubah ukurannya, daftar tertaut, kamus yang diurutkan dan
tidak disortir serta array. Dari jumlah tersebut, hanya array yang merupakan bagian dari bahasa C#;
koleksi yang tersisa hanyalah kelas yang Anda buat seperti yang lain.
Meskipun implementasi internal dan karakteristik eksternal dari struktur data ini sangat bervariasi,
kemampuan untuk menelusuri isi koleksi merupakan kebutuhan yang hampir universal. Kerangka
mendukung kebutuhan ini melalui sepasang antarmuka ( IEnumerable,IEnumerator dan rekan-
rekan generik ).
1
Pelajaran 4 [ ADVANCE PROGRAMMING]
Koleksi adalah kumpulan catatan terkait. Ini termasuk unit yang berarti:
Kita harus memilih wadah yang sesuai untuk menyimpan data sementara untuk proses pengambilan
dan modifikasi.
Wadah yang sesuai tergantung pada :
1. tujuan yang ingin kita lakukan pada data ( hanya membaca, melakukan modifikasi seperti
menyisipkan, menghapus, memperbarui )
2. Jumlah record yang harus ditransfer
Himpunan
1. Panjang Tetap -> Ukurannya tidak fleksibel. Hal ini ditentukan pada waktu instantiasi.
2. Sangat Diketik -> Pengembang menentukan jenisnya pada waktu instantiasi alih-alih waktu proses.
Fitur ini membuat berjalan cepat saat runtime, karena tidak perlu menunggu definisi tipe.
3. Pengembang menggunakan kata kunci "foreach" untuk mengisi dan mengulangi array.
Fixed Length dan Strongly Typed mengkonsumsi lebih sedikit memori, oleh karena itu memiliki
kinerja yang baik.
2
Pelajaran 4 [ ADVANCE PROGRAMMING]
Contoh 1:
kelas ArrayContoh
{
publik statis batal Utama()
{
string [] strData = baru string [5];
untuk ( int i = 0; i < strData.Length; i++)
{
strData[i] = (i + 1).ToString();
}
}
Konsol .ReadKey();
}
}
Kelas Array berisi berbagai metode untuk menemukan elemen dalam array satu dimensi:
kelas ArrayContoh1
{
publik statis batal Utama()
{
string [] nama = { "Jack" , "Simon" , "Frederick" };
//ekspresi lambda
string match = Array .Find(names, n => n.Contains( "a" ));
Konsol .WriteLine(cocok);
3
Pelajaran 4 [ ADVANCE PROGRAMMING]
lambda
Ekspresi lambda adalah fungsi anonim yang dapat Anda gunakan untuk
membuat delegasi atau pohon ekspresi jenis . Dengan menggunakan ekspresi lambda, Anda dapat
menulis fungsi lokal yang dapat diteruskan sebagai argumen atau dikembalikan sebagai nilai
pemanggilan fungsi. Ekspresi Lambda sangat membantu untuk menulis ekspresi kueri LINQ.
Sintaksis:
Contoh 3:
Daftar < int > angka = baru Daftar < int > () { 10, 20, 15, 60 };
int indeks = angka.FindIndex(x=>x%2!=0);
Konsol .WriteLine(indeks);
Contoh 4:
Daftar < string > buah = baru Daftar < string >(){ "Apel" , "Oranye" ,
"Pisang" };
string startmatch = buah.Temukan(n => n.MulaiDengan( "O" ));
Konsol .WriteLine(startmatch);
Daftar Array
1. Arraylist BUKAN Panjang Tetap -> Ada kemungkinan data bertambah. Di satu sisi itu adalah fitur
yang bagus setiap kali pengembang tidak yakin tentang ukuran daftar array dan di sisi lain mungkin
butuh waktu lama untuk definisi ukuran.
2. Arraylist TIDAK Diketik dengan Kuat -> Setiap kali pengembang tidak yakin tentang apa sebenarnya
definisi tipe untuk data input atau output dan mereka harus menunggu hingga runtime untuk
menampilkan tipenya. Kerugiannya adalah memakan waktu pada saat runtime untuk memori untuk
menentukan definisi tipe.
3. Pengembang menggunakan kata kunci "foreach" untuk mengisi dan mengulangi melalui arraylist .
4
Pelajaran 4 [ ADVANCE PROGRAMMING]
kelas ArrayDaftarContoh
{
publik statis batal Utama()
{
ArrayList arrList = baru Daftar Array ();
Konsol .WriteLine(sb);
Konsol .ReadKey();
}
}
Tabel Hash
HashTable adalah jenis lain dari struktur data yang mendefinisikan nilai kunci untuk setiap bagian
data. Oleh karena itu mencari data itu mudah hanya dengan menunjukkan kuncinya. Ini TIDAK
diketik dengan kuat dan BUKAN ukuran tetap.
kelas HashTableContoh
{
publik statis batal Utama()
{
Hashtable hsTable = baru Tabel hash ();
5
Pelajaran 4 [ ADVANCE PROGRAMMING]
Tumpukan
Kami memiliki struktur data yang berbeda dan tumpukan adalah salah satunya. Stack adalah bagian
dari struktur data. Stack adalah struktur data yang diprioritaskan (seperti List adalah basis terindeks).
Stack mendefinisikan prioritas untuk setiap item, artinya perilaku stack memaksa item-itemnya
untuk dimasukkan (push) ke dalam formulir prioritas stack. Jadi susun item kemudian di atas item
dan perilaku ini adalah "menentukan prioritas untuk setiap item". Oleh karena itu setiap kali Anda
ingin memasukkan item, Anda harus menambahkan (PUSH) di bagian atas tumpukan dan setiap kali
Anda ingin menghapus (POP) item dari tumpukan Anda harus menghapusnya dari atas tumpukan.
Seperti yang Anda dapatkan, item yang datang terakhir akan dipilih ke POP untuk yang pertama dan
ekspresinya dalam ilmu komputer sama dengan "Last in First out" == "LIFO".
6
Pelajaran 4 [ ADVANCE PROGRAMMING]
{
Konsol .WriteLine(item); // keluarkan data dari tumpukan
}
}
}
Q ueue
Antrian adalah jenis lain dari struktur data yang mendefinisikan prioritas untuk setiap item dalam
bentuk lain. Oleh karena itu setiap kali Anda ingin memasukkan item, Anda harus menambahkan
(Enqueue) di kepala antrian dan kapan pun Anda ingin menghapus (Dequeue) item dari antrian Anda
harus menghapusnya dari bawah antrian. Saat Anda mendapatkannya, item yang datang lebih dulu
akan dipilih untuk Dequeue untuk yang pertama dan ekspresinya dalam ilmu komputer sama dengan
"First in First out" == "FIFO".
7
Pelajaran 4 [ ADVANCE PROGRAMMING]
Daftar
Mengapa kita perlu Daftar?
1. Daftar TIDAK Panjang Tetap -> Ada kemungkinan data bertambah. Di satu sisi itu adalah fitur yang
bagus setiap kali pengembang tidak yakin tentang ukuran daftar array dan di sisi lain mungkin butuh
waktu lama untuk definisi ukuran.
2. Daftar Diketik dengan Kuat ketika didefinisikan "Generik" -> Setiap kali pengembang yakin tentang
apa sebenarnya definisi tipe untuk data input atau output dan mereka tidak menunggu sampai
runtime untuk menampilkan tipenya. Fitur ini membuat berjalan cepat saat runtime, karena tidak
perlu menunggu definisi tipe.
3. Pengembang menggunakan kata kunci "foreach" untuk mengisi dan mengulangi array.
Karena Daftar tidak Panjang Tetap membuat pengembang merasa fleksibel untuk menggunakannya,
dan karena itu Sangat Diketik ketika didefinisikan "Generik" sehingga kode kami berjalan cepat saat
runtime karena tidak perlu menunggu definisi tipe.
8
Pelajaran 4 [ ADVANCE PROGRAMMING]
Contoh 1:
kelas DaftarContoh
{
publik statis batal Utama()
{
//Instansiasi dan
Daftar < string > dataList = baru Daftar < string >();
Contoh2:
}
}
Daftar
Mengapa kita membutuhkan IList ? IList diimplementasikan oleh List, Ilist adalah antarmuka dan
mengimplementasikan metode. Setiap kali Anda memperkirakan kemungkinan bahwa kode Anda
akan diubah di masa depan, Anda harus menggunakan IList karena antarmuka mengurangi
ketergantungan dan dengan sedikit modifikasi kode Anda berjalan. Oleh karena itu Anda harus
mengamati polimorfisme untuk memisahkan aplikasi Anda dan mengontrol penambahan atau
penghapusan metode yang mungkin diubah. Segala sesuatu yang lain serupa. Setiap kali kita ingin
mengubah beberapa operasi, jadi " IList " memungkinkan kita untuk melakukannya dengan mudah
dengan setidaknya mengubah seluruh kode.
Antarmuka tidak dapat di-instantiate, jadi harus di-instantiate dari List
IList < string > dataIList = baru IList < string >(); //kesalahan
9
Pelajaran 4 [ ADVANCE PROGRAMMING]
Larutan:
IList < string > dataIList = baru Daftar < string >();
Contoh:
kelas IListContoh1
{
publik statis batal Utama()
{
IList < string > dataIList = baru Daftar < string >();
10
Pelajaran 4 [ ADVANCE PROGRAMMING]
Polimorfisme : Saat Anda menggunakan antarmuka, Anda benar-benar mengamati dan melakukan
polimorfisme dan OOP. Ini berarti merangkum desainer Anda. Antarmuka berarti titik atau simpul
untuk menghubungkan dua bagian satu sama lain, itu berarti membuat ketergantungan rendah dari
dua bagian dan membuat bagian gabungan untuk membuatnya fleksibel dengan perubahan di masa
depan.
Contoh:
kelas IListContoh1
{
publik statis batal Utama()
{
IList < int > dataIList = baru Daftar < int >();
dataIList.Add(100);
dataIList.Add(1000);
Konsol .WriteLine(str);
Konsol .ReadKey();
}
}
11
Pelajaran 4 [ ADVANCE PROGRAMMING]
dapat dihitung
IEnumerable cocok hanya untuk beralih melalui pengumpulan dan Anda tidak dapat mengubah
(Tambah atau Hapus) data IEnumerable membawa SEMUA data dari server ke klien kemudian
memfilternya, anggap Anda memiliki banyak catatan sehingga IEnumerable menempatkan overhead
pada memori Anda.
Contoh 1:
publik kelas Murid
{
publik string ID { dapatkan ; mengatur ; }
publik string Nama { dapatkan ; mengatur ; }
publik int Umur { dapatkan ; mengatur ; }
}
kelas IEnumerableContoh1
{
publik statis batal Utama()
{
IEnumerable < Mahasiswa > dataIEnumerable = baru Daftar < Siswa
>()
{
baru Siswa {ID= "1001" , Nama= "John Smith" , Umur=25},
baru Siswa {ID= "1002" , Nama= "Amanda Tan" , Umur=30},
baru Siswa {ID= "1003" , Nama= "Jason Chen" , Umur=28}
};
Console .WriteLine( "StudID" + "\t" + "StudName" + "\t" +
"StudAge" );
foreach ( Item siswa dalam dataIEnumerable)
{
Console .WriteLine(item.ID + "\t" + item.Name + "\t" +
item.Usia);
}
12
Pelajaran 4 [ ADVANCE PROGRAMMING]
}
}
Contoh 2:
IEnumerable < Mahasiswa > dataIEnumerable = baru Daftar < Siswa >()
{
baru Siswa {ID= "1001" , Nama= "John Smith" , Umur=25},
baru Siswa {ID= "1002" , Nama= "Amanda Tan" , Umur=30},
baru Siswa {ID= "1003" , Nama= "Jason Chen" , Umur=28}
};
Console .WriteLine( "StudID" + "\t" + "StudName" + "\t" +
"StudAge" );
foreach ( Item siswa dalam dataIEnumerable)
{
Console .WriteLine(item.ID + "\t" + item.Name + "\t" +
item.Usia);
}
publik IEnumerator
{
bool Pindah Berikutnya ();
objek Saat Ini { dapatkan; }
batal Atur Ulang();
}
publik IEnumerable
{
IEnumerator GetEnumerator ( );
}
Contoh:
13
Pelajaran 4 [ ADVANCE PROGRAMMING]
kelas IEnumerableIEnumeratorEx1
{
publik statis batal Utama()
{
string s = "Halo Dunia" ;
IEnumerator enumRator = s.GetEnumerator();
sementara (enumRator.MoveNext())
{
char c = ( char )enumRator.Current;
Konsol .Tulis(c + "." );
}
}
}
Namun, jarang memanggil metode pada enumerator secara langsung dengan cara ini, karena C#
menyediakan pintasan sintaksis: pernyataan foreach . Berikut contoh yang sama yang ditulis ulang
menggunakan foreach :
Contoh:
kelas IEnumerableIEnumeratorGeneric
{
publik statis batal Utama()
{
IEnumerable < int > s = dari nilai dalam Enumerable .Range(0,
2)
pilih nilai;
14
Pelajaran 4 [ ADVANCE PROGRAMMING]
}
// dapat menggunakan metode ekstensi di IEnumerable<int>
jalan ganda = s.Rata-rata();
Konsol .WriteLine(ave);
15
Pelajaran 4 [ ADVANCE PROGRAMMING]
16
Pelajaran 4 [ ADVANCE PROGRAMMING]
// Bawa SEMUA catatan dari server -> ke klien lalu filter koleksi
//Untuk membawa semua data dari server, Anda harus menghilangkan where cluse dari
linq ke sql
queryIEnumerable = dari m di ctx.Karyawan pilih m;
//Jika Anda menggunakan metode ekstensi where sebagai IEnumerable maka Semua
catatan akan dimuat
queryIEnumerable = queryIEnumerable.Where (x => x.ID == 1 ). DaftarTo ();
//Setiap kali Anda memanggil IQueryable jadi ==> Itu akan dieksekusi
this .GridViewIQueryable.DataSource = queryIQueryable.ToList ( );
ini .GridViewIQueryable.DataBind ( );
Koleksi
ICollection mewarisi dari IEnumerable. Ada satu perbedaan:
17
Pelajaran 4 [ ADVANCE PROGRAMMING]
18
Pelajaran 4 [ ADVANCE PROGRAMMING]
//Dapat dihitung***
ke dalam ICollectionCount = strICollection.Count ;
this.ListBoxICollection.DataSource = strICollection ;
this.ListBoxICollection.DataBind ( );
Sistem. Teks .StringBuilder str = Sistem baru. Teks .StringBuilder ( );
foreach ( var item dalam strIKoleksi )
{
str.Tambahkan ( " , " + item);
}
this.lblKoleksi. Teks = str.ToString ( );
// Daftar ***
System.Collections.Generic.IList <Employee> objIList = Daftar baru<Karyawan >( );
objIList = ( dari m in ctx.Karyawan
pilih m). DaftarTo ();
// Koleksi ***
System.Collections.Generic.ICollection <Karyawan> objICollection = Daftar
baru<Karyawan >( );
objICollection = ( dari m in ctx.Karyawan
pilih m). DaftarTo ();
ObjIC karyawan = objICollection. Dimana ( i => i.Name == "Sara" ). PertamaOrDefault ();
//Anda tidak bisa mendapatkan indeks dari objek, jika Anda menghapus komentar dari kode di
bawah ini, muncul kesalahan
// ke dalam indexofSaraICollection = objIC.IndexOf ( objIC );
ke dalam cICollection = objICollection.Count ;
Referensi
msdn.microsoft.com: Jenis Koleksi yang Umum Digunakan
http://www.codeproject.com/Articles/732425/IEnumerable-Vs-IQueryable
http://www.dotnet-tricks.com/Tutorial/linq/I8SY160612-IEnumerable-VS-IQueryable.html
http://www.claudiobernasconi.ch/2013/07/22/when-to-use-ienumerable-icollection-ilist-and-list
http://www.dotnetperls.com/
Tutorial MVC: http://technical.cosmicverse.info/Article/Index/3
Tutorial Lapisan Akses Data: http://technical.cosmicverse.info/Article/Index/4
19