difference
Devuelve los elementos del segundo iterable que no aparecen en el primero — el orden de los argumentos importa.
Lección
Lee la firma con atención: difference(iterable1, iterable2)
recorre iterable2 y emite cada uno de sus
elementos que no se encuentre en iterable1
(sin duplicados, como uniq). iterable1 se usa
únicamente como conjunto de pertenencia contra el que comprobar —
ninguno de sus propios elementos puede aparecer en la salida, y sus
duplicados dan igual. Este orden no es simétrico: intercambiar los
argumentos produce un resultado completamente distinto (y por lo general
de distinta longitud). Una forma útil de recordarlo: piensa en
iterable1 como «la lista de exclusión» y en
iterable2 como «la lista que estás filtrando».
Por dentro es differenceBy((a) => a, iterable1, iterable2) —
mira differenceBy si
necesitas comparar por una clave calculada en vez de por igualdad de
valor.
No hay método de cadena para difference; solo existe como
función data-first (y su contraparte asíncrona). En el lado asíncrono,
el marcador de concurrencia de .concurrent(n) se aplica a
iterable2 — el conjunto de exclusión de
iterable1 siempre se consume por completo antes de que
empiecen a fluir los resultados.
Demo 1 · Fundamentos & orden de los argumentos
Demo 2 · Asíncrono, con concurrencia
Pruébalo tú
Ejercicio: usa difference para encontrar las tareas de
allTasks que aún no están en completed.
differenceBy — lo mismo, por una clave calculada ·
intersection — quedarse con los elementos comunes en su lugar ·
uniq — elimina duplicados de un solo iterable ·
includes — comprueba la pertenencia en un solo iterable