web-dev-qa-db-ja.com

Swiftディクショナリに値が含まれていないかどうかを確認しますか?

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

9
Rohan Singh

簡単な方法があります:

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 }
13
Rob Napier

isEmptyを使用できます

var dict: Dictionary<Int, String> = [:]

var result = dict.isEmpty

resulttrueになります

7
Cole

関数型プログラミングアプローチ:

let allEmpty = arr.reduce(true) { $0 && $1.1.isEmpty }

あなたが暗黙のクロージャ引数の大ファンでないなら、もちろんそれらに名前を付けることができます:

let allEmpty = arr.reduce(true) { empty, Tuple in empty && Tuple.1.isEmpty }
2
Michael Kohl