Depset

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

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

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

พารามิเตอร์ order จะกำหนดชนิดของการข้ามผ่านที่ทำขึ้นเพื่อแปลง Depset ไปเป็นการทำซ้ำได้ ค่าที่เป็นไปได้มี 4 ค่า ได้แก่

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

สามารถรวมดีเซ็ต 2 รายการได้เฉพาะในกรณีที่ทั้ง 2 คันมีลำดับเดียวกัน หรือฝั่งใดฝั่งหนึ่งมีลำดับ "default" ในกรณีหลัง ลำดับของ Depset ที่ได้จะเหมือนกับลำดับของอีกคนหนึ่ง

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

สมาชิก

to_list

list depset.to_list()

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