Enumerasi dalam Templat - Panduan Metode Data
PDF4meMesin pembuatan dokumen menyediakan metode enumerasi yang ampuh untuk memanipulasi koleksi data dalam templat. Metode-metode ini, serupa dengan C# IEnumerable, menawarkan kontrol komprehensif atas operasi data termasuk pengurutan, pemfilteran, agregasi, dan transformasi.
Metode Enumerasi yang Tersedia
Metode-metode berikut dapat diterapkan pada koleksi di dalam template Anda untuk memproses dan memanipulasi data secara dinamis:
Metode Penyaringan dan Validasi
All(Predicate) - Menentukan apakah semua elemen memenuhi suatu kondisi
[employees.All(p => p.Age < 50)]
Any() - Menentukan apakah suatu koleksi berisi elemen apa pun
employees.Any()
Any(Predicate) - Menentukan apakah suatu elemen memenuhi suatu kondisi
employees.Any(p => p.Name == "Mary Doe")
Contains(Object) - Menentukan apakah suatu koleksi berisi elemen tertentu
employees.Contains(otherPersons.First())
Metode Agregasi
Average(Selector) - Menghitung rata-rata dari kumpulan angka
employees.Average(p => p.Age)
Count() - Mengembalikan jumlah elemen dalam sebuah koleksi
employees.Count()
Count(Predicate) - Mengembalikan jumlah elemen yang memenuhi suatu kondisi
employees.Count(p => p.Age > 30)
Max(ComparableSelector) - Mengembalikan nilai maksimum dalam sebuah koleksi
employees.Max(p => p.Age)
Min(ComparableSelector) - Mengembalikan nilai minimum dalam sebuah koleksi
employees.Min(p => p.Age)
Sum(Selector) - Menghitung jumlah nilai numerik dalam sebuah koleksi
employees.Sum(p => p.Children.Count())
Metode Seleksi dan Proyeksi
First() - Mengembalikan elemen pertama dari sebuah koleksi
employees.First()
First(Predicate) - Mengembalikan elemen pertama yang memenuhi suatu kondisi
employees.First(p => p.Age > 30)
FirstOrDefault() - Mengembalikan elemen pertama, atau nilai default jika kosong
employees.FirstOrDefault()
FirstOrDefault(Predicate) - Mengembalikan elemen pertama yang memenuhi suatu kondisi, atau nilai default.
employees.FirstOrDefault(p => p.Age > 30)
Last() - Mengembalikan elemen terakhir dari sebuah koleksi
employees.Last()
Last(Predicate) - Mengembalikan elemen terakhir yang memenuhi suatu kondisi
employees.Last(p => p.Age > 100)
LastOrDefault() - Mengembalikan elemen terakhir, atau nilai default jika kosong
employees.LastOrDefault()
LastOrDefault(Predicate) - Mengembalikan elemen terakhir yang memenuhi suatu kondisi, atau nilai default.
employees.LastOrDefault(p => p.Age > 100)
Single() - Mengembalikan satu-satunya elemen dari sebuah koleksi
employees.Single()
Single(Predicate) - Mengembalikan satu-satunya elemen yang memenuhi suatu kondisi
employees.Single(p => p.Name == "John Smith")
SingleOrDefault() - Mengembalikan satu-satunya elemen, atau nilai default jika kosong
employees.SingleOrDefault()
SingleOrDefault(Predicate) - Mengembalikan satu-satunya elemen yang memenuhi suatu kondisi, atau nilai default.
employees.SingleOrDefault(p => p.Name == "Mary Doe")
Metode Pemesanan
OrderBy(ComparableSelector) - Mengurutkan elemen dalam urutan menaik
employees.OrderBy(p => p.Age)
Dapat dirangkai dengan pemesanan tambahan:
employees.OrderBy(p => p.Age).ThenByDescending(p => p.Name)
OrderByDescending(ComparableSelector) - Mengurutkan elemen dalam urutan menurun
employees.OrderByDescending(p => p.Age)
Dapat dirangkai dengan pemesanan tambahan:
employees.OrderByDescending(p => p.Age).ThenByDescending(p => p.Name)
Operasi Penagihan
Concat(IEnumerable) - Menggabungkan dua koleksi
employees.Concat(otherPersons)
Distinct() - Mengembalikan elemen-elemen unik dari sebuah koleksi
employees.Distinct()
Union(IEnumerable) - Menghasilkan gabungan himpunan dari dua koleksi
employees.Union(otherPersons)
Where(Predicate) - Menyaring elemen berdasarkan suatu kondisi
employees.Where(p => p.Age > 18)
Operasi Himpunan
Skip(int) - Melewati sejumlah elemen tertentu
employees.Skip(10)
SkipWhile(Predicate) - Melewati elemen selama suatu kondisi terpenuhi
employees.SkipWhile(p => p.Age < 35)
Take(int) - Mengembalikan sejumlah elemen yang ditentukan
employees.Take(5)
TakeWhile(Predicate) - Mengembalikan elemen selama suatu kondisi bernilai benar
employees.TakeWhile(p => p.Age < 50)
Metode Transformasi
Select(Selector) - Memproyeksikan setiap elemen ke dalam bentuk baru
employees.Select(p => p.Name)
SelectMany(EnumerationSelector) - Memproyeksikan dan meratakan koleksi
employees.SelectMany(p => p.Children)
GroupBy(Selector) - Mengelompokkan elemen berdasarkan kunci yang ditentukan
employees.GroupBy(p => p.Age)
Dapat dikelompokkan berdasarkan beberapa properti:
employees.GroupBy(p => new { Age = p.Age, Count = p.Children.Count() })
Contoh Praktis
Contoh 1: Penyaringan dan Penghitungan
Templat:
Total employees over 30: <<[employees.Count(p => p.Age > 30)]>>
Average age: <<[employees.Average(p => p.Age)]>>
Contoh 2: Tampilan Bersyarat
Templat:
<<if [employees.Any(p => p.Age > 50)]>>
We have senior employees in the team.
<</if>>
Contoh 3: Daftar yang Diurutkan
Templat:
<<foreach [emp in employees.OrderBy(p => p.Name)]>>
- <<[emp.Name]>> (Age: <<[emp.Age]>>)
<</foreach>>
Contoh 4: Data yang Dikelompokkan
Templat:
<<foreach [group in employees.GroupBy(p => p.Department)]>>
Department: <<[group.Key]>>
Employee Count: <<[group.Count()]>>
<</foreach>>
Rantai Metode
Beberapa metode enumerasi dapat dirangkai bersama untuk operasi data yang kompleks:
<<[employees
.Where(p => p.Age > 25)
.OrderBy(p => p.Name)
.Take(10)
.Select(p => p.Name)]>>
Ungkapan ini:
- Menyaring karyawan berusia di atas 25 tahun.
- Mengurutkannya berdasarkan nama
- Mengambil 10 hasil pertama
- Hanya memilih nama mereka
Praktik Terbaik
- Gunakan predikat secara efisien. - Saring data sedini mungkin dalam rantai pemrosesan.
- Hindari ungkapan yang rumit. - Uraikan logika kompleks menjadi beberapa langkah
- Uji dengan data sampel - Verifikasi apakah metode enumerasi berfungsi dengan struktur data Anda
- Tangani koleksi kosong - Menggunakan
Any()untuk memeriksa sebelum memproses koleksi - Optimalkan kinerja - Minimalkan pemanggilan metode enumerasi dalam perulangan
:::Tips Pertimbangan Kinerja Saat bekerja dengan koleksi data besar, pertimbangkan untuk memfilter dan membatasi data di sumbernya daripada di templat untuk kinerja yang lebih baik. :::