Depset

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

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

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

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

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

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

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

สมาชิก

to_list

list depset.to_list()

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