depset

Laporkan masalah Lihat sumber

Struktur data khusus yang mendukung operasi penggabungan yang efisien dan memiliki urutan traversal yang ditentukan. Umumnya digunakan untuk mengumpulkan data dari dependensi transitif dalam aturan dan aspek. Untuk informasi selengkapnya lihat di sini.

Elemen depset harus dapat di-hash dan semua berjenis sama (sebagaimana ditentukan oleh fungsi type(x) bawaan), tetapi depset bukan sekadar set hash dan tidak mendukung pengujian keanggotaan cepat. Jika memerlukan jenis data kumpulan umum, Anda dapat menyimulasikan jenis data menggunakan kamus dengan semua kunci dipetakan ke True.

Depset tidak dapat diubah. Argumen tersebut harus dibuat menggunakan fungsi konstruktor dan digabungkan atau ditambah dengan depset lain melalui argumen transitive.

Parameter order menentukan jenis traversal yang dilakukan untuk mengonversi depset menjadi iterable. Ada empat kemungkinan nilai:

  • "default" (sebelumnya "stable"): Urutan tidak ditentukan (tetapi deterministik).
  • "postorder" (sebelumnya "compile"): Pasca-pemesanan kiri-ke-kanan. Tepatnya, elemen ini secara rekursif melintasi semua turunan paling kiri dulu, lalu elemen langsung yang paling kiri terlebih dahulu.
  • "preorder" (sebelumnya "naive_link"): Praorder kiri ke kanan. Tepatnya, elemen ini akan melewati elemen langsung yang paling kiri terlebih dahulu, lalu secara rekursif melintasi elemen turunan paling kiri terlebih dahulu.
  • "topological" (sebelumnya "link"): Pengurutan topologi dari root hingga ke daun. Tidak ada jaminan dari kiri ke kanan.

Dua depset hanya dapat digabungkan jika kedua depset tersebut memiliki urutan yang sama, atau salah satunya memiliki urutan "default". Dalam kasus yang terakhir, urutan depset yang dihasilkan akan sama dengan urutan yang lain.

Depset dapat berisi nilai duplikat, tetapi nilai ini akan disembunyikan saat melakukan iterasi (menggunakan to_list()). Duplikat dapat mengganggu semantik pengurutan.

Anggota

to_list

list depset.to_list()

Menampilkan daftar elemen, tanpa duplikat, dalam urutan traversal depset. Perhatikan bahwa urutan tidak ditentukan (tetapi determenistik) untuk elemen yang ditambahkan lebih dari sekali ke depset. Urutan juga tidak ditentukan untuk depset yang diurutkan "default", dan untuk elemen depset turunan yang urutannya berbeda dengan depset induk. Daftar ini adalah salinan; mengubahnya tidak akan berdampak pada depset, begitu pula sebaliknya.