Depset

โครงสร้างข้อมูลเฉพาะที่รองรับการผสานอย่างมีประสิทธิภาพและมีลำดับการข้ามที่กำหนดไว้ โดยทั่วไปจะใช้เพื่อสะสมข้อมูลจากการขึ้นต่อกันแบบส่งผ่านในกฎและแง่มุมต่างๆ ดูข้อมูลเพิ่มเติมที่ นี่

องค์ประกอบของ depset ต้องเป็นแบบแฮชได้และเป็นประเภทเดียวกันทั้งหมด (ตามที่กำหนดโดยฟังก์ชัน type(x) ในตัว) แต่ depset ไม่ใช่เพียงแค่ชุดแฮชและไม่รองรับการทดสอบการเป็นสมาชิกอย่างรวดเร็ว หากต้องการประเภทข้อมูลชุดทั่วไป คุณสามารถจำลองได้โดยใช้พจนานุกรมที่คีย์ทั้งหมดแมปกับ True

Depset เปลี่ยนแปลงไม่ได้ ควรสร้างโดยใช้ ฟังก์ชันตัวสร้าง และผสานหรือเพิ่มด้วย depset อื่นๆ ผ่านอาร์กิวเมนต์ transitive

พารามิเตอร์ order จะกำหนดประเภทการข้ามที่ใช้เพื่อแปลง depset เป็น iterable โดยมีค่าที่เป็นไปได้ 4 ค่า ดังนี้

  • "default" (เดิมชื่อ "stable"): ไม่ได้ระบุลำดับ (แต่กำหนดได้)
  • "postorder" (เดิมชื่อ "compile"): การจัดลำดับหลังแบบจากซ้ายไปขวา กล่าวคือ ฟังก์ชันนี้จะข้ามองค์ประกอบย่อยทั้งหมดแบบซ้ำๆ โดยเริ่มจากซ้ายสุดก่อน แล้วจึงข้ามองค์ประกอบโดยตรงแบบจากซ้ายไปขวา
  • "preorder" (เดิมชื่อ "naive_link"): การจัดลำดับก่อนแบบจากซ้ายไปขวา กล่าวคือ ฟังก์ชันนี้จะข้ามองค์ประกอบโดยตรงแบบจากซ้ายไปขวา แล้วจึงข้ามองค์ประกอบย่อยแบบซ้ำๆ โดยเริ่มจากซ้ายสุดก่อน
  • "topological" (เดิมชื่อ "link"): การจัดลำดับโทโพโลยีจากรูทลงไปที่ลีฟ ไม่มีการรับประกันการจัดลำดับจากซ้ายไปขวา

คุณจะผสาน depset 2 รายการได้ก็ต่อเมื่อ depset ทั้ง 2 รายการมีลำดับเดียวกัน หรือ depset รายการใดรายการหนึ่งมีลำดับ "default" ในกรณีหลังนี้ ลำดับของ depset ที่ได้จะเป็นลำดับเดียวกับลำดับของ depset อีกรายการ

Depset อาจมีค่าที่ซ้ำกัน แต่ระบบจะระงับค่าเหล่านี้เมื่อมีการวนซ้ำ (โดยใช้ to_list()) ค่าที่ซ้ำกันอาจรบกวนความหมายของการจัดลำดับ

สมาชิก

to_list

list depset.to_list()

แสดงผลรายการองค์ประกอบโดยไม่มีรายการที่ซ้ำกันตามลำดับการข้ามของ depset โปรดทราบว่าไม่ได้ระบุลำดับ (แต่กำหนดได้) สำหรับองค์ประกอบที่เพิ่มลงใน depset มากกว่า 1 ครั้ง นอกจากนี้ ยังไม่ได้ระบุลำดับสำหรับ depset ที่จัดลำดับ "default" และสำหรับองค์ประกอบของ depset ย่อยที่มีลำดับแตกต่างจาก depset ระดับบนสุด รายการนี้เป็นสำเนา การแก้ไขรายการนี้จะไม่มีผลกับ depset และในทางกลับกัน