Rohan Singh
Rohan Singh

Reputation: 471

Check If Swift Dictionary Contains No Values?

So I'm making a to-do list app, and I want the user to be notified when all of the shopping items have been deleted. I have a dictionary that contains the String:store as a key and the [String]:items as the values. Is there a fast way to check if all of the items' arrays are empty?

Upvotes: 11

Views: 21509

Answers (3)

Michael Kohl
Michael Kohl

Reputation: 66837

A functional programming approach:

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

If you're not a big fan of implicit closure arguments, you can of course name them:

let allEmpty = arr.reduce(true) { empty, tuple in empty && tuple.1.isEmpty }

Upvotes: 4

Rob Napier
Rob Napier

Reputation: 299355

There's the easy way:

dicts.values.flatten().isEmpty

But that will walk through all the lists without any shortcuts. Usually that's really not a problem. But if you want to bail out when you find a non-empty one:

func isEmptyLists(dict: [String: [String]]) -> Bool {
    for list in dicts.values {
        if !list.isEmpty { return false }
    }
    return true
}

Of course you can make this much more generic to get short-cutting and convenience:

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 }

Upvotes: 16

Cole
Cole

Reputation: 2646

You can just use isEmpty

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

var result = dict.isEmpty

result will be true

Upvotes: 13

Related Questions