Depset

รายงานปัญหา ดูแหล่งที่มา

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

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

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

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

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

สามารถผสาน Depset 2 รายการได้ในกรณีที่ Depset ทั้ง 2 รายการมีลำดับเหมือนกัน หรือ 1 ในนั้นมีลำดับ "default" ในกรณีหลัง ลำดับของการตั้งค่าผลลัพธ์จะเหมือนกับลำดับของอีกชุดหนึ่ง

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

สำหรับสมาชิก

to_list

list depset.to_list()

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