首页 > 解决方案 > Swift 4.2 闭包

问题描述

嗨,我正在快速学习我有一个关于用于过滤集合的闭包的练习

我有两个简单的闭包,用于过滤和映射字典

let myDict: [String: Int] = ["Dan":38, "Kira":2, "Olga":33, "Jess":10, "Bobo":4]

let filteredMyDict = myDict.filter {
    return $0.value < 5
}
print(filteredMyDict)

let filteredNames = filteredMyDict.map {
    return $0.key
}

print(filteredNames)

是否可以链接过滤器和映射语句,如果可以的话。

标签: swiftclosures

解决方案


你可以链接filtermap

let filteredNames = myDict.filter { $0.value < 5 }
    .map { $0.key }

或用于compactMap通过字典的单次遍历获得结果:

返回一个数组,其中包含使用此序列的每个元素调用给定转换的非零结果。

在你的情况下:

let filteredNames = myDict.compactMap {
    $0.value < 5 ? $0.key : nil
}

推荐阅读