La List & Herramientas de registro Scripting Addition proporciona intersection of listA and listB
(entre otros bits de terminología).
No hay una "primitiva" incorporada para calcular una intersección de lista. Por lo general, uno solo usaría uno o más bucles para verificar cada elemento de una lista con el otro. Esto se puede simplificar (y acelerar 1 ) un bit usando uno de los operadores is in
/ is contained by
/ contains
(o una negación de los mismos):
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 El operador is in
y sus parientes se implementan en el entorno de ejecución de AppleScript en un código de nivel inferior, donde se ejecutan mucho más rápido que el código de AppleScript interpretado normalmente.
Por cierto, los controladores que usan parámetros etiquetados tienen un conjunto limitado de términos que se pueden usar para las etiquetas. Por ejemplo, intersection of listA and listB
no es posible como un controlador definido por el usuario porque and
no es una etiqueta reconocida. Consulte la sección AppleScript Language Guide en la sección controladores con parámetros etiquetados para obtener una lista de etiquetas válidas. Las aplicaciones y las extensiones OSA pueden definir sus propias terminologías (por ejemplo, la Lista y el Registro OSAX proporcionan esta sintaxis exacta), pero los controladores definidos por el usuario no son tan flexibles. Por lo general, solo uso los parámetros posicionales ( handlerName(param1, param2, …)
) en lugar de intentar que las invocaciones de mis controladores se vean como prosa.