One qq about maps and chaining. Below code works perfectly fine
var raceResults = [["one","two","four"],["two","one","five","six"],["two","one","four","ten"],["one","two","four"]]
let numberedRaceResults = raceResults
.enumerated()
.flatMap { outterOffset, raceResult in
raceResult
.enumerated()
.map { innerOffset, element in "\(outterOffset).\(innerOffset). \(element)" }
}
for numberedResult in numberedRaceResults {
print(numberedResult)
}
But when I add two print statements in it , it stops working. Can someone-one please help me to understand
1.what's the deal with those print statements 2. If I replace flatmap with map, code below does not work. My understanding about flatmap is it just eliminates the nil values . Is there something on top of it that flatmap does comapred to map which is why I am not getting expected results when I replace flatmap with map ?
var raceResults = [["one","two","four"],["two","one","five","six"],["two","one","four","ten"],["one","two","four"]]
let numberedRaceResults = raceResults
.enumerated()
.flatMap { outterOffset, raceResult in
print(outterOffset)
print(raceResult)
raceResult
.enumerated()
.map { innerOffset, element in "\(outterOffset).\(innerOffset). \(element)" }
}
for numberedResult in numberedRaceResults {
print(numberedResult)
}
When you write many lines inside the {}
of flatMap
function you need to tell it what should be the result and since print
returns () / void
,hence you get nothing , so you need to add a return
under the two prints
let numberedRaceResults = raceResults
.enumerated()
.flatMap { outterOffset, raceResult in
print(outterOffset)
print(raceResult)
return raceResult // here
.enumerated()
.map { innerOffset, element in "\(outterOffset).\(innerOffset). \(element)" }
}
for numberedResult in numberedRaceResults {
print(numberedResult)
}