Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 570
Rohan Singh Avatar asked Feb 15 '16 16:02

Rohan Singh


3 Answers

You can just use isEmpty

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

var result = dict.isEmpty

result will be true

like image 57
Cole Avatar answered Oct 11 '22 14:10

Cole


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 }
like image 32
Michael Kohl Avatar answered Oct 11 '22 12:10

Michael Kohl


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 }
like image 34
Rob Napier Avatar answered Oct 11 '22 13:10

Rob Napier