我必須過濾包含我在文本欄位中的文本的字典//我的代碼
var arrayData = [["Name":"Sahil"],["Name":"Raman"],["Name":"ashish"],["Name":"Vishnu"],["Name":"Deep"],["Name":"sahil"],["Name":"Swift"]]
//my result should be like this
[["Name":"Sahil"],["Name":"ashish"],["Name":"Vishnu"],["Name":"Swift"]]
uj5u.com熱心網友回復:
不清楚,您稍后在評論中解釋了它,但您希望保留"Name"包含“s”不區分大小寫的鍵的值。
讓我們添加幾個額外的值來說明您之前的嘗試失敗的原因:
var arrayData = [["Name":"Sahil"],
["Name":"Raman"],
["Name":"ashish"],
["Name":"Vishnu"],
["Name":"Deep"],
["Name":"sahil"],
["Name":"Swift"],
["Name":"s"],
["Name":"S"]]
并簡化:
let searchText = "s" // textField.text ?? ""
你嘗試過:
let filteredArray1 = arrayData.filter { $0["Name"] == searchText }
print(filteredArray1)
輸出:
$> [["Name": "s"]]
所以,只有當 value 完全等于 時,你才會得到"s",這是正常的,你正在使用==
然后您嘗試:
let filteredArray2 = arrayData.filter { $0["Name"]!.contains(searchText) }
print(filteredArray2)
輸出:
$>[["Name": "ashish"], ["Name": "Vishnu"], ["Name": "sahil"], ["Name": "s"]]
所以,當它有一個"s"內部時,你會得到任何值。差不多就是這樣,但是當它有一個大寫時你不會得到"S"。為此,您可以使用range(of:options:searchRange:local:)with .caseInsensitiveoptiono。如果結果不是nil,則表示已找到。
所以你可以使用:
let filteredArray3 = arrayData.filter { $0["Name"]?.range(of: "s", options: .caseInsensitive) != nil }
print(filteredArray3)
輸出:
$>[["Name": "Sahil"], ["Name": "ashish"], ["Name": "Vishnu"], ["Name": "sahil"], ["Name": "Swift"], ["Name": "s"], ["Name": "S"]]
uj5u.com熱心網友回復:
這應該有效:
var arrayDataFiltered = arrayData.filter { $0["Name"]?.lowercased().contains("s") ?? false }
這是過濾的檔案:https : //developer.apple.com/documentation/swift/sequence/3018365-filter
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/404570.html
標籤:
下一篇:遍歷字串作為子字串?[復制]
