[英]how to filter dictionary based on their value character swift
我必须在文本字段//我的代码中过滤包含我的文本的字典
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"]]
这应该有效:
var arrayDataFiltered = arrayData.filter { $0["Name"]?.lowercased().contains("s") ?? false }
这是过滤的文档: https://developer.apple.com/documentation/swift/sequence/3018365-filter
不清楚,您稍后在评论中解释了它,但您希望保留键"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)
Output:
$> [["Name": "s"]]
所以,只有当 value 完全等于"s"
时,你才会得到,这很正常,你正在使用==
然后您尝试:
let filteredArray2 = arrayData.filter { $0["Name"]!.contains(searchText) }
print(filteredArray2)
Output:
$>[["Name": "ashish"], ["Name": "Vishnu"], ["Name": "sahil"], ["Name": "s"]]
所以,当它里面有一个"s"
时,你会得到任何值。 差不多就是这样,但是当它有一个大写的"S"
时,你不会得到。 为此,您可以将range(of:options:searchRange:local:)
与.caseInsensitive
optiono 一起使用。 如果结果不是nil
,则表示已找到。
所以你可以使用:
let filteredArray3 = arrayData.filter { $0["Name"]?.range(of: "s", options: .caseInsensitive) != nil }
print(filteredArray3)
Output:
$>[["Name": "Sahil"], ["Name": "ashish"], ["Name": "Vishnu"], ["Name": "sahil"], ["Name": "Swift"], ["Name": "s"], ["Name": "S"]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.