5 votos

¿Cómo puedo encontrar la intersección de dos listas en AppleScript?

Digamos que tengo dos listas de AppleScript:

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

Me gustaría crear una tercera lista que tiene sólo los elementos presentes en ambas listas:

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

Básicamente, algo como PHP array_intersect().

Hay un built-en la manera de hacer esto?
Si no, me encantaría una recomendación de secuencias de comandos, además de que resuelve este problema.

5voto

Nip Puntos 362

La Lista Y las Herramientas de Registro de secuencias de comandos ofrece a intersection of listA and listB (entre otros bits de la terminología).

No hay ninguna integrada en el "primitivo" para el cálculo de una lista de intersección. Generalmente uno podría usar uno o más de los bucles de verificación de cada elemento de una lista en contra de la otra. Esto puede ser simplicado (y aceleró1) un poco por el uso de uno de los is in/is contained by/contains operadores (o una negación de la misma):

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"}

1La is in operador y sus familiares son implementadas por el AppleScript entorno de tiempo de ejecución en el nivel inferior, donde el código se ejecutan mucho más rápido que el normal interpretado AppleScript código.


Por cierto, los controladores que utilizan la etiqueta parámetros tienen un conjunto limitado de términos que se pueden utilizar para las etiquetas. Por ejemplo, intersection of listA and listB no es posible como definido por el usuario del controlador debido a que and no es un reconocido etiqueta. Consulte la Guía de Lenguaje de AppleScript sección de controladores con la etiqueta parámetros para obtener una lista de etiquetas. Aplicaciones y OSA extensiones pueden define su propia terminología (por ejemplo, la Lista Y Registro de OSAX proporciona esta sintaxis exacta), pero definida por el usuario de los controladores no son tan flexibles. Usualmente utilizo los parámetros de posición (handlerName(param1, param2, …)) en lugar de intentar hacer las invocaciones de los controladores de mi mirada como la prosa.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X