zip
為 FP 代表性 Function,可直接將兩個 Array 合併成 Array Pair。
Version
Sanctuary 3.1.0
zip
import { zip } from 'sanctuary'
let data1 = [1, 2, 3]
let data2 = [2, 4, 6]
let f = zip
f (data1) (data2) // ?
zip
可將兩個 Array 合併成 Array Pair。
zip
Array a -> Array b -> Array (Pair a b)
將兩個 Array 合併成 Array Pair
Array a
:data 為 Array
Array b
:data 為 Array
Array (Pair a b)
:回傳為 Array Pair
import { zip } from 'sanctuary'
let data1 = [1, 2, 3]
let data2 = [2, 4, 6, 8]
let f = zip
f (data1) (data2) // ?
若兩個 Array 長度不同,將以較短的 Array 為準。
String
import { zip } from 'sanctuary'
let data1 = 'dog'
let data2 = 'rabbit'
let f = zip
f (data1) (data2) // ?
zip
若用在 String,會發生 error。
因為 Sanctuary 認為 Array a 與 String 是不同型別,因此產生 error
import S from 'sanctuary'
let { unchecked: { zip }} = S
let data1 = 'dog'
let data2 = 'rabbit'
let f = zip
f (data1) (data2) // ?
若不檢查型別,則 zip
可用於 String。
Different Type
import { zip } from 'sanctuary'
let data1 = ['a', 'b', 'c']
let data2 = [1, 2, 3]
let f = zip
f (data1) (data2) // ?
兩個 Array 也可使用不同型別。
Conclusion
- Haskell 與 Ramda 的
zip
都可使用 String,Sanctuary 的zip
預設不能使用 String,因為 Sanctuary 認為 Array a 與 String 型別並不相同,必須將型別檢查關閉才能使用 String - Sanctuary 的
zip
會明確回傳Array Pair(a b)
,而 Ramda 的zip
則只回傳[[a, b]]