ฉันจะหาจุดตัดของสองรายการใน AppleScript ได้อย่างไร


5

สมมติว่าฉันมีสองรายการใน AppleScript:

set listA to {"red", "green", "blue"}
set listB to {"green", "blue"}

ฉันต้องการสร้างรายการที่สามที่มีเฉพาะรายการที่อยู่ในทั้งสองรายการ :

set listC to intersection of listA and listB --something like this
-- would return {"green", "blue"}

โดยทั่วไปสิ่งที่ต้องการของ PHP array_intersect ()

มีวิธีการทำเช่นนี้หรือไม่?
ถ้าไม่ฉันชอบคำแนะนำสำหรับการเพิ่มสคริปต์เพื่อแก้ปัญหานี้

คำตอบ:


5

การเพิ่มการเขียนสคริปต์เครื่องมือรายการและบันทึกให้intersection of listA and listB(ในกลุ่มคำศัพท์อื่น ๆ )

ไม่มี "ดั้งเดิม" ในตัวสำหรับคำนวณจุดตัดรายการ โดยปกติแล้วจะใช้การวนซ้ำอย่างน้อยหนึ่งลูปเพื่อตรวจสอบแต่ละองค์ประกอบของรายการหนึ่งเทียบกับอีกรายการหนึ่ง สิ่งนี้สามารถลดความซับซ้อนได้ (และเร่ง1 ) บิตโดยใช้หนึ่งในis in/ is contained by/ containsโอเปอเรเตอร์ (หรือลบล้าง):

set listA to {"red", "green", "blue"}
set listB to {"green", "blue"}

to intersection of listA against listB
    local newList, a
    set newList to {}
    repeat with a in listA
        set a to contents of a -- dereference implicit loop reference
        if {a} is in listB then set end of newList to a
    end repeat
    newList
end intersection

intersection of listA against listB --> {"green", "blue"}

1ตัวis inดำเนินการและเครือญาติของมันถูกนำมาใช้โดยสภาพแวดล้อมรันไทม์ AppleScript ในรหัสระดับล่างซึ่งพวกเขาดำเนินการเร็วกว่าโค้ด AppleScript ที่ตีความปกติ


อนึ่งตัวจัดการที่ใช้พารามิเตอร์ที่มีเลเบลมีชุดคำศัพท์ที่ จำกัด ซึ่งสามารถใช้สำหรับเลเบลได้ ตัวอย่างเช่นintersection of listA and listBไม่สามารถเป็นตัวจัดการที่ผู้ใช้กำหนดได้เนื่องจากandไม่ใช่เลเบลที่รู้จัก ดูที่ส่วนคู่มือภาษา AppleScriptบนตัวจัดการพร้อมพารามิเตอร์ที่มีเลเบลสำหรับรายการของเลเบลที่ถูกต้อง แอปพลิเคชันและส่วนขยาย OSA สามารถกำหนดคำศัพท์ของตนเอง (เช่น List & Record OSAX มีไวยากรณ์ที่แน่นอนนี้) แต่ตัวจัดการที่ผู้ใช้กำหนดเองไม่ยืดหยุ่น ฉันมักจะใช้พารามิเตอร์ตำแหน่ง ( handlerName(param1, param2, …)) แทนที่จะพยายามทำให้การเรียกใช้ตัวจัดการของฉันดูเหมือนจะเป็นร้อยแก้ว


ขอบคุณ! ฉันใช้วิธีวนรอบ ฉันแค่มองหาวิธีที่ง่ายขึ้น ฉันกำลังติดตั้งนอกจากนี้ในตอนนี้; มันดูสมบูรณ์แบบ
Nathan Greenstein
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.