如何在swift中使用过滤功能

时间:2015-10-02 15:03:37

标签: ios swift

我是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)
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

我认为您正在寻找的功能是过滤器。 map函数用于对数组的每个元素执行某些操作,然后将结果分配给新数组。因此,当您使用map函数时,生成的数组将与映射的数组具有相同的容量。但是,过滤器用于查找符合布尔条件的数组中的项。使用过滤器功能时,生成的数组可以是从0arrayToFilter.count的任何容量。

应用滤镜功能来减少你的for循环看起来像这样。 $0将是来自company的{​​{1}}对象,因为过滤器func会迭代该数组(类似于你的for循环)。

editableStaticUserData.companies

如果代码中存在语法错误,我很抱歉;我做到了这一点。

答案 1 :(得分:3)

对不起我的评论,我没有看到你的代码。我会喜欢这个

let identifiers = companies.flatMap({$0.companiesIdentifier})
let result = companyIds?.intersect(identifiers)

结果是可选的,但它几乎是一样的