Map, flatMap, compactMap

seocho·2022년 9월 20일
0

iOS

목록 보기
18/24

map

배열 내부의 원소를 하나씩 탐색

let rowArr = board[i].filter {$0 != "."}
// 어떠한 이차원 배열에서 하나의 row를 탐색하는 코드
let colArr = board.map { $0[i] }.filter { $0 != "." }
// 어떠한 이차원 배열에서 하나의 column을 탐색하는 코드

flatMap, compactMap

flatMap

2차원 배열을 1차원 배열로 만들고 nil제거 및 옵셔널 바인딩

input = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]

let nineToNineArr = board[row..<(row + 3)].flatMap { $0[column..<(column + 3)] }.filter {$0 != "."}
// 9x9 block에서 3x3에서의 값만 추릴 때 사용한 코드
// 3x3또한 2차원 배열이므로 set으로 값을 비교하고자할 때 flatMap으로 1차원함수로 변경하여 값을 비교하도록 구현

<Output>
// ["5", "3", "6", "9", "8"], ["7", "1", "9", "5"], ["6"], ["8", "4", "7"], ["6", "8", "3", "2"], ["3", "1", "6"], ["6"], ["4", "1", "9", "8"], ["2", "8", "5", "7", "9"]

compactMap

nil제거 및 옵셔널 바인딩

let array: [[Int?]] = [[1, 2, 3], [nil, 5], [6, nil], [nil, nil]]
let compactMapTest = array2.compactMap { $0 }

<Output>
// [[Optional(1), Optional(2), Optional(3)], [nil, Optional(5)], [Optional(6), nil], [nil, nil]]
profile
iOS 개린이

0개의 댓글