Swift Map vs CompactMap vs FlatMap
Understanding the differences
					Posted: 17 Oct 2024
					Last Modified: 17 Oct 2024
				
				
					
					1 min read
				
			It can be confusing to remember the difference, so this is a cheatsheet for reference.
Swift .map()
map({}) transforms all elements in a list.
let list = ["about", "testing", "1", "100", "300"]
print(list)
// ["about", "testing", "1", "100", "300"]
let mappedList = list.map({ String($0.reversed()) })
print(mappedList)
// ["tuoba", "gnitset", "1", "001", "003"]
.compactMap()
compactMap() compacts the list, by removing the nil items. (filterMap was the original name for the function when it was proposed)
let list = ["about", nil, "testing", "1", nil, "100", "300", nil]
print(list)
// [Optional("about"), nil, Optional("testing"), Optional("1"), nil, Optional("100"), Optional("300"), nil]
let compactedList = list.compactMap({ $0 })
print(compactedList)
// ["about", "testing", "1", "100", "300"]
.flatMap()
flatMap() flattens a list of other lists by combining their contents.
let list = [ ["1", "2", "3"], ["a", "b", "c"], ["kyle", "harry", "tom"] ]
print(list)
// [["1", "2", "3"], ["a", "b", "c"], ["kyle", "harry", "tom"]]
let compactedList = list.flatMap({ $0 })
print(compactedList)
// ["1", "2", "3", "a", "b", "c", "kyle", "harry", "tom"]