isMatch

Coincidencia parcial profunda: ¿contiene target todo lo que describe pattern?

bool isMatch(Object? target, Object? pattern)

Lección

isMatch recorre pattern de forma recursiva y comprueba que target lo «contiene», con reglas distintas según la forma:

Los Map coinciden parcialmente: cada clave de pattern debe existir en target con un valor que coincida recursivamente, pero target puede tener claves de más que el patrón no menciona. Las listas/iterables se comparan por pares desde el principio, y aquí está el detalle que conviene recordar: el patrón solo tiene que ser un prefijo del target. [1, 2, 3] coincide con el patrón [1, 2], pero no con el patrón [1, 2, 3, 4] — el patrón no puede ser más largo que el target. Cualquier otra cosa (números, cadenas, booleanos, …) se compara con un == normal.

Como las reglas anidan, la coincidencia profunda te sale casi gratis: un patrón como {'address': {'city': 'seoul'}} coincide con un map de usuario con un valor address mucho más grande y anidado, siempre que city sea 'seoul' en algún punto dentro de él.

Demo 1 · Coincidencia de Map

Demo 2 · Coincidencia por prefijo en listas, y filtrar con ella

Pruébalo tú

Ejercicio: usa isMatch para comprobar si order coincide con {'status': 'shipped'}.

Relacionado: matches — la versión currificada de esto, lista para filtrar · pickBy — suele acompañarla para filtrar por forma · find — localiza el primer elemento que coincide · omitBy — descarta entradas según un predicado