Swift Standard Library: Zip2

There are lots useful of type, functions, protocols and classes in the Swift Standard Library, many of which have little or no documentation. After finding Swifter a website that extracts what little documentation exists, I have been trying to come up with example code demonstrating them. This is the first post in what I hope will be a series of posts.

Zip2

Given two sequences {default}[ x0, x1 … xn ]{/default} and {default}[ y0, y1 … yn ]{/default}, {default}Zip2{/default} produces the sequence {default}[ (x0, y0), (x1, y1) … (xn, yn) ]{/default}.

For example, suppose you are writing a Spanish verb conjugator, and you want to prepend the personal pronouns to each form of the verb, you could write:

var vs = [ "hablo", "hablas", "habla", "hablamos", "habláis", "hablan" ]
let ps = [ "yo", "tú", "él/ella", "nosotros", "vosotros", "ellos/ellas"]

let pv = map(Zip2(ps, vs)) { "\($0) \($1)" }

pv

Or if you are more mathematically minded you could implement a dot product routine:

var v1 = [ 1.0, 2.0, 3.0 ]
var v2 = [ 3.0, 2.0, 1.0 ]

func dot(v1 : [Double], v2: [Double]) -> Double {
    return map(Zip2(v1,v2), *).reduce(0.0, +)
}

dot(v1, v2)

Download the Playground

The source for this and all other playgrounds in this series can be found on Github in the SwiftStandardLibraryPlaygrounds repository.


About idz

A professional software engineer dabbling in iOS app development.
This entry was posted in Swift, Tutorial. Bookmark the permalink.

Leave a Reply