そこで、やることリストアプリを作成していて、すべてのショッピングアイテムが削除されたときにユーザーに通知してもらいたいと思っています。 String:storeをキーとして、[String]:itemsを値として含む辞書があります。すべてのアイテムの配列が空であるかどうかを確認する簡単な方法はありますか?
簡単な方法があります:
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 }