Lewati ke konten utama

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:

  1. Menyaring karyawan berusia di atas 25 tahun.
  2. Mengurutkannya berdasarkan nama
  3. Mengambil 10 hasil pertama
  4. Hanya memilih nama mereka

Praktik Terbaik

  1. Gunakan predikat secara efisien. - Saring data sedini mungkin dalam rantai pemrosesan.
  2. Hindari ungkapan yang rumit. - Uraikan logika kompleks menjadi beberapa langkah
  3. Uji dengan data sampel - Verifikasi apakah metode enumerasi berfungsi dengan struktur data Anda
  4. Tangani koleksi kosong - Menggunakan Any() untuk memeriksa sebelum memproses koleksi
  5. 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. :::