我有一段代码.我不知道这段代码里面有什么内容.任何人都可以解释一下吗?
let wordFreqs = [("k",5),("a",7),("b",3)] let res = wordFreqs.filter( { (e) -> Bool in if e.1 > 3 { return true } else { return false } }).map { $0.0 } print(res)
提供输出:
["k","a"]
解决方法
如果我们一个接一个地使用此代码的部分:
let wordFreqs = [("k",3)]
你从一系列元组开始.
从Swift文档:
A tuple type is a comma-separated list of types,enclosed in parentheses.
和:
Tuples group multiple values into a single compound value. The values within a tuple can be of any type.
在这种情况下,元组是2个值的“耦合”,一个是String类型,另一个是Int类型.
let res = wordFreqs.filter( { (e) -> Bool in
此部分在阵列上应用过滤器.你可以在这里看到过滤器的闭包采用元素e(因此,在我们的例子中,是一个元组),并返回一个Bool.使用’filter’函数,返回true表示保留值,而返回false表示将其过滤掉.
if e.1 > 3 { return true } else { return false }
e.1语法返回索引1处元组的值.
因此,如果索引1(第二个)的元组值超过3,则过滤器返回true(因此将保留元组);如果不是,则过滤器返回false(因此从结果中排除元组).
此时,过滤器的结果将是[(“k”,(“a”,7)]
}).map { $0.0 }
map函数基于元组数组创建一个新数组:对于输入数组的每个元素($0),它返回索引0处的元组值.所以新数组是[“k”,“a”]
print(res)
这会将结果打印到控制台.
这些函数(滤波器,映射,缩减等)在函数式编程中非常常见.它们通常使用点语法链接,例如,[1,2,3] .filter({}).map({}).reduce({})