2017-11-08 20 views
2

단어 배열이 있고 일부는 오타가 있거나 없을 수 있습니다. 내가 원하는 무엇배열을 매핑하고 if 절을 사용하고 잘못된 데이터를 필터링하는 방법은 무엇입니까?

potentialWords = ["hello", "lkasjdf", "hunry"] 

는 유효한 모든 단어의 배열을 반환하고, 수 있었다 또한 그 단어는 내가 correctWord 생성 기능을 사용하여 자동 수정되어야한다. 잠재적 인 일치 항목의 배열을 반환합니다. "hunry"["hungry", "hurry"]을 반환 할 수 있습니다. 가장 좋은 추측을위한 첫 번째 색인을 선택하겠습니다.

그러나 일부 단어는 수정할 수 없습니다! 예 : "lkasjdf"은 수정 사항을 찾지 못하지만 "hunry"이됩니다.

내가 좋아하는 뭔가를 시도했다 :이 불평 물론

potentialWords.map { 
    if correctWord($0) != nil { 
    return correctWord($0)[0] 
    } 
} 

을하고 나는 경우 절 외부의 반환이 필요하다고 말한다. 단어를 수정할 수있는 기반으로 목록을 필터링 한 다음 필터링 된 목록에 매핑하고 수정해야 할 단어를 다시 확인하지만 correctWord 함수를 여러 번 실행하면 매우 민감합니다.

나는 하나의 패스 스루를 할 수 있고, 모든 유효한 단어의 배열을 돌려주고, 또한 수정 된 단어를 원한다.

P. 간결함을 위해지도 함수에서 correctWord을 두 번 호출하고 있습니다. 물론 변수에 correctWord($0)을 할당하고 nil이 아닌 경우 첫 번째 인덱스를 가져 와서 새 목록에 추가하십시오.

답변

4

나는 당신이 flatMap 이후라고 생각합니다. nil 값을 걸러내는 것을 제외하면지도와 동일합니다.

potentialWords.flatMap { correctWord($0)?.first } 
+0

awesome! 고맙습니다 – VDog