我是swift的新手。我写了一个方法来查找数组中的匹配项。但我正在使用一个简单的for循环。我在想是否有任何方法可以使用map进行此类操作。
var matchedCompanyIds : Set<String> = []
for company in editableStaticUserData.companies {
if let companyIdentifier : String = company.companiesIdentifier {
if let companyIds = self.editableFilter?.companyIds {
if companyIds.contains(companyIdentifier) {
matchedCompanyIds.insert(companyIdentifier)
}
}
}
}
答案 0 :(得分:3)
我认为您正在寻找的功能是过滤器。 map函数用于对数组的每个元素执行某些操作,然后将结果分配给新数组。因此,当您使用map函数时,生成的数组将与映射的数组具有相同的容量。但是,过滤器用于查找符合布尔条件的数组中的项。使用过滤器功能时,生成的数组可以是从0
到arrayToFilter.count
的任何容量。
应用滤镜功能来减少你的for循环看起来像这样。 $0
将是来自company
的{{1}}对象,因为过滤器func会迭代该数组(类似于你的for循环)。
editableStaticUserData.companies
如果代码中存在语法错误,我很抱歉;我做到了这一点。
答案 1 :(得分:3)
对不起我的评论,我没有看到你的代码。我会喜欢这个
let identifiers = companies.flatMap({$0.companiesIdentifier})
let result = companyIds?.intersect(identifiers)
结果是可选的,但它几乎是一样的