【发布时间】:2016-02-15 16:51:51
【问题描述】:
所以我正在制作一个待办事项列表应用程序,我希望在所有购物项目都被删除时通知用户。我有一个字典,其中包含 String:store 作为键和 [String]:items 作为值。有没有一种快速的方法来检查所有项目的数组是否为空?
【问题讨论】:
标签: arrays swift dictionary swift2
所以我正在制作一个待办事项列表应用程序,我希望在所有购物项目都被删除时通知用户。我有一个字典,其中包含 String:store 作为键和 [String]:items 作为值。有没有一种快速的方法来检查所有项目的数组是否为空?
【问题讨论】:
标签: arrays swift dictionary swift2
有一个简单的方法:
dicts.values.flatten().isEmpty
但这将遍历所有列表而没有任何快捷方式。通常这真的不是问题。但是,如果您想在找到非空的时候退出:
func isEmptyLists(dict: [String: [String]]) -> Bool {
for list in dicts.values {
if !list.isEmpty { return false }
}
return true
}
当然,您可以使这个更通用,以获得捷径和方便:
extension SequenceType {
func allPass(passPredicate: (Generator.Element) -> Bool) -> Bool {
for x in self {
if !passPredicate(x) { return false }
}
return true
}
}
let empty = dicts.values.allPass{ $0.isEmpty }
【讨论】:
你可以使用isEmpty
var dict: Dictionary<Int, String> = [:]
var result = dict.isEmpty
result 将是 true
【讨论】:
函数式编程方法:
let allEmpty = arr.reduce(true) { $0 && $1.1.isEmpty }
如果你不是隐式闭包参数的忠实粉丝,你当然可以命名它们:
let allEmpty = arr.reduce(true) { empty, tuple in empty && tuple.1.isEmpty }
【讨论】: