繁体   English   中英

根据Swift中的空值过滤数组

[英]Filter an array based on empty value in Swift

我正在尝试过滤一系列字典。 以下代码是我正在寻找的场景的示例

let names = [ 
    [ "firstName":"Chris","middleName":"Alex"],
    ["firstName":"Matt","middleName":""],
    ["firstName":"John","middleName":"Luke"],
    ["firstName":"Mary","middleName":"John"],
]

最终结果应该是一个中间名称的数组。

这样做了

names.filter {
  if let middleName = $0["middleName"] {
    return !middleName.isEmpty
  }
  return false
}

您还可以使用nil-coalescing运算符来非常简洁地表达它:

let noMiddleName = names.filter { !($0["middleName"] ?? "").isEmpty }

这将使用空字符串替换缺少的中间名,因此您可以使用.isEmpty处理(如果要获取具有中间名称的那些则可以取消)。

您还可以使用可选链接和nil-coalescing运算符以另一种方式表达它:

let noMiddleName = names.filter { !($0["middleName"]?.isEmpty ?? true) }

$0["middleName"]?.isEmpty如果值不是nil则调用isEmpty ,但返回一个可选项(因为它可能是nil )。 然后你用?? 替换nil true

略短:

let result = names.filter { $0["middleName"]?.isEmpty == false }

这处理所有三种可能的情况:

  • 如果中间名存在且不是空字符串,则$0["middleName"]?.isEmpty求值为false ,谓词返回true
  • 如果中间名存在且空字符串,则$0["middleName"]?.isEmpty计算结果为true ,谓词返回false
  • 如果中间名不存在 ,则$0["middleName"]?.isEmpty求值为nil ,谓词返回false (因为nil != false )。

这也很好

names.filter {

if let middleName = $0["middleName"] {
 return middleName != ""
}
return false
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM