我有两个数组,一个数组是配置文件数组,另一个是节名称之一:
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
答案 0 :(得分:2)
您可以使用zip
和compactMap
:
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]