【问题标题】:Check If Swift Dictionary Contains No Values?检查 Swift 字典是否不包含任何值?
【发布时间】:2016-02-15 16:51:51
【问题描述】:

所以我正在制作一个待办事项列表应用程序,我希望在所有购物项目都被删除时通知用户。我有一个字典,其中包含 String:store 作为键和 [String]:items 作为值。有没有一种快速的方法来检查所有项目的数组是否为空?

【问题讨论】:

    标签: arrays swift dictionary swift2


    【解决方案1】:

    有一个简单的方法:

    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 }
    

    【讨论】:

    • 谢谢!这三者的运行时间是否不同?
    • 第一个将遍历所有元素。当他们发现第一个非空时,后两个将停止检查。
    • 好吧,最坏的情况他们是一样的
    【解决方案2】:

    你可以使用isEmpty

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

    result 将是 true

    【讨论】:

    • 我相信 isEmpty 也会检查字典中的键。我只想检查键的值(即数组)是否为空。
    【解决方案3】:

    函数式编程方法:

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

    如果你不是隐式闭包参数的忠实粉丝,你当然可以命名它们:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2015-03-23
      • 2017-02-27
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 2013-03-04
      相关资源
      最近更新 更多