You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何从Array<Any>数组中搜索指定字符串?

解决Array中搜索特定字符串的问题

首先修正你代码里的基础问题:

  • 不能用Array作为变量名(这是Swift关键字),建议换成itemsArray
  • 字符串字面量必须加双引号,比如"Doe"、"john_doe@gmail.com"
  • 如果数组包含nil,类型应声明为[Any?]而非[Any]

针对核心的「将Array元素转为String并搜索」需求,提供两种实用方案:

方案1:遍历数组逐个匹配

手动遍历数组,处理可选值和类型转换后进行匹配(支持忽略大小写,适合邮箱这类场景):

// 修正后的数组
let itemsArray: [Any?] = [1, "Doe", "John", "john_doe@gmail.com", "jdoe", "t", "03/11/2022 15:00:00", nil, 1]
let stringToSearch = "John_doe@gmail.com"

var termExists = false
for item in itemsArray {
    // 先解包可选值,再尝试转为String
    guard let element = item, let elementStr = element as? String else {
        continue
    }
    // 忽略大小写比较
    if elementStr.caseInsensitiveCompare(stringToSearch) == .orderedSame {
        termExists = true
        break
    }
}

NSLog(termExists ? "Term Exists" : "Can't find term")

方案2:用高阶函数简化代码

利用contains(where:)方法,用更简洁的写法实现相同逻辑:

let itemsArray: [Any?] = [1, "Doe", "John", "john_doe@gmail.com", "jdoe", "t", "03/11/2022 15:00:00", nil, 1]
let stringToSearch = "John_doe@gmail.com"

let exists = itemsArray.contains { item in
    guard let element = item, let str = element as? String else {
        return false
    }
    return str.caseInsensitiveCompare(stringToSearch) == .orderedSame
}

NSLog(exists ? "Term Exists" : "Can't find term")

补充说明

  • 如果数组不含nil,可去掉guard let element = item的解包步骤
  • 需要精确大小写匹配时,把caseInsensitiveCompare替换为直接的==即可
  • 若要将数字、日期等非字符串类型转为对应字符串再搜索,可扩展转换逻辑:
    guard let element = item else { continue }
    var elementStr: String?
    if let str = element as? String {
        elementStr = str
    } else if let num = element as? Int {
        elementStr = String(num)
    } else if let date = element as? Date {
        let formatter = DateFormatter()
        formatter.dateFormat = "dd/MM/yyyy HH:mm:ss"
        elementStr = formatter.string(from: date)
    }
    // 后续比较逻辑...
    

内容的提问来源于stack exchange,提问作者PAW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:25:17