【问题标题】:how to filter dictionary based on their value character swift如何根据值字符快速过滤字典
【发布时间】:2022-01-05 12:44:08
【问题描述】:

我必须在文本字段中过滤包含我的文本的字典 //我的代码

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"]]

【问题讨论】:

  • 我必须得到包含字母“s”的值
  • 对不起,我不知道如何堆栈溢出,请不要减少我的帖子
  • 让 filtersArray = arrayData.filter({$0["Name"] == textField.text})
  • 它将只保留名称值为“s”的值。您可能想改用contains()...用您的尝试编辑您的问题,特别是用“s”表示逻辑,因为没有它就不清楚了。
  • filteredArray = arrayData.filter({$0["Name"]?.contains(textField.text!) as!Bool})

标签: ios swift dictionary


【解决方案1】:

不清楚,您稍后在 cmets 中进行了解释,但您希望保留包含“s”不区分大小写的键 "Name" 的值。

让我们添加几个附加值来说明您之前的尝试失败的原因:

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:).caseInsensitive 选项一起使用。如果结果不是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"]]

【讨论】:

    【解决方案2】:

    这应该可行:

    var arrayDataFiltered = arrayData.filter { $0["Name"]?.lowercased().contains("s") ?? false }
    

    这里是过滤的文档: https://developer.apple.com/documentation/swift/sequence/3018365-filter

    【讨论】:

    • 这个也对
    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2019-12-27
    • 2020-02-06
    相关资源
    最近更新 更多