繁体   English   中英

如何根据字典的值字符 swift 过滤字典

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

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