[英]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.