这个库为 Swift 提供 列表推导式。 如下所示:
let numbers = [1, 2, 3]
let letters = "ab"
// produces ["a1", "a2", "a3", "b1", "b2", "b3"]
Array(letters, numbers) { "\($0)\($1)" }
// produces ["a1", "a3", "b1", "b3"]
Array(letters, numbers, where: { $1 % 2 != 0 }) { "\($0)\($1)" }
.package(url: "git@github.com:dduan/Comprehension.git", .branch("master")),
(并将 "Comprehension"
添加到目标的依赖项中。)
use_frameworks!
pod "Comprehension"
github "dduan/Comprehension"
将 Sources/Comprehension/Comprehension.swift
文件包含到您的项目中。
列表推导式是一种强大的语法,用于处理 Haskell、Python 等语言中的列表。 当您需要处理多个列表中每个元素的组合(它们的笛卡尔积)时,它特别有用。
列表推导式的起源通常归因于数学中的集合推导式,例如:
{2·x|x ∈ ℕ, x ≤ 10}
... 意味着“取所有小于 10 的整数(集合 ℕ 的元素),每个乘以 2,并用结果形成一个新集合。”
这是一个列表推导式在 Haskell 中如何工作的例子
ghci> [x+y | x <- [1,2,3], y <- [10,100,1000]]
[11,101,1001,12,102,1002,13,103,1003]
在这里,一个列表中的整数与另一个列表中的整数按顺序配对,产生 3 * 3 = 9 对。 每对的和构成了结果整数列表。
单个列表的推导式等同于 list.filter(f).map(g)
。 当输入是 2 个列表时:
// Comprehension syntax
let result = Array(list0, list1, where: f) { g($0, $1) }
... 等同于 ...
var result = [TypeOfElementInList0, TypeOfElementInList1]()
for e0 in list0 {
for e1 in list1 {
if f(e0, e1) {
result.append(g(e0, e1))
}
}
}
// The fact that `result` is a var is not equivalent, but 🤷♀️.
... 或者用函数式风格 ...
let result = list0
.map { e0 in
list1.map { e1 in
(e0, e1)
}
}
.joined()
.filter(f)
.map(g)
请注意,上面的列表推导式版本更加简洁。 想象一下将示例扩展到 3、4、5 个列表!
MIT,请参阅 LICENSE。