isMatch

깊은 부분 일치 검사입니다. targetpattern이 기술한 내용을 모두 담고 있습니까?

bool isMatch(Object? target, Object? pattern)

강의

isMatchpattern을 재귀적으로 훑으면서 target이 그것을 "담고 있는지" 확인합니다. 규칙은 모양에 따라 다릅니다.

Map은 부분 일치입니다. pattern의 모든 키가 target에 존재하고 그 값도 재귀적으로 일치해야 하지만, target에는 패턴이 언급하지 않은 추가 키가 있어도 괜찮습니다. 리스트나 이터러블은 앞에서부터 짝을 지어 비교하는데, 여기에 기억해 둘 만한 반전이 있습니다. 패턴은 타깃의 접두사이기만 하면 됩니다. [1, 2, 3]은 패턴 [1, 2]와는 일치하지만 결코 패턴 [1, 2, 3, 4]와는 일치하지 않습니다. 패턴이 타깃보다 길 수는 없습니다. 그 밖의 값(숫자, 문자열, 불리언 …)은 그냥 ==로 비교합니다.

규칙이 중첩되기 때문에 깊은 일치 검사는 거의 거저 얻습니다. {'address': {'city': 'seoul'}} 같은 패턴은, 훨씬 크고 깊게 중첩된 address 값을 가진 사용자 map이라도 그 안 어딘가에 city'seoul'이기만 하면 일치합니다.

데모 1 · Map 일치

데모 2 · 리스트 접두사 일치, 그리고 그것으로 필터링하기

직접 해 보기

연습: isMatchorder{'status': 'shipped'}와 일치하는지 확인해 보세요.

관련 항목: matches — 이 함수를 커링해 filter에 바로 쓸 수 있게 만든 버전 · pickBy — 모양 기반 필터링에서 자주 함께 쓰는 함수 · find — 처음으로 일치하는 원소 찾기 · omitBy — 술어로 항목 제거하기