基于另一个的过滤器数组

时间:2019-10-02 18:27:32

标签: swift filter

我有两个数组,一个数组是配置文件数组,另一个是节名称之一:

var sections: [Array<Profile>] = [friends, contacts, other]
var sectionNames = ["Friends", "Contacts", "Other Users"]

如何根据节是否为空来过滤名称?尝试以下代码时出现错误:

sectionNames.filter { index, _ in
    sections[index].count > 0
}

Contextual closure type '(String) throws -> Bool' expect 1 argument, but two given

2 个答案:

答案 0 :(得分:2)

您可以使用zipcompactMap

let nonEmptySections = zip(sections, sectionNames).compactMap { $0.isEmpty ? nil : $1 }

使用zip的优点是,如果两个数组的大小不同,则不会崩溃。另一方面,它可能导致细微的错误。

我建议您改用数据结构为数据建模:

struct Section {
    let name: String
    let profiles: [Profile]
}

这应该简化您处理应用中各部分的方式。通过使用@Alexander的建议,您可以在结构中添加isEmpty属性,使其更易于使用

extension Section {
    var isEmpty: Bool { return profiles.isEmpty }
}

... later in the code

let nonEmptySections = sections.filter { !$0.isEmpty }

答案 1 :(得分:0)

您可以尝试类似的事情

var ar1:[Array<Int>] = [[1,2],[3,4,],[],[5,6]]
var ar2 = [1,2,3,4]
ar2 = (0 ..< ar1.count).filter {ar1[$0].count > 0}.map {ar2[$0]}
print(ar2) // [1, 2, 4]