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

如何在Swift的for循环中用模式匹配提取嵌套数组中的字符串(无需嵌套循环)

解决方案:利用Swift模式匹配提取嵌套数组的首个字符串

嘿,这个需求好办得很!既然已知每个内层数组的首个元素都是字符串,咱们完全可以用Swift的模式匹配特性来实现,根本不需要嵌套for循环~

直接遍历打印的实现

你可以用for case语法直接匹配内层数组的结构,精准提取首个字符串元素:

let arr2 = [["a", true, 1, 5.0], ["b", true, 2, 15.0], ["c", false, 31, 12.0]]

// 方式1:明确匹配数组元素个数(适合固定长度的内层数组)
for case let [str as String, _, _, _] in arr2 {
    print(str) // 依次输出 a、b、c
}

// 方式2:适配任意长度的内层数组(Swift 5.7+支持)
for case let [str as String, ..<] in arr2 {
    print(str) // 同样输出 a、b、c
}

解释一下:

  • _用来忽略数组中不需要的元素,适合内层数组长度固定的场景;
  • ..<是Swift 5.7引入的前缀模式,表示匹配首个元素之后的所有元素,不管内层数组有多长都能兼容,灵活性更高。

提取为数组的实现

如果需要把结果收集到一个新数组里,用compactMap结合模式匹配的guard case语法就很高效:

let arr2 = [["a", true, 1, 5.0], ["b", true, 2, 15.0], ["c", false, 31, 12.0]]

let extractedStrings = arr2.compactMap { innerArr in
    guard case let [str as String, ..<] = innerArr else {
        return nil // 理论上这里不会触发,因为已知首个元素是字符串
    }
    return str
}

print(extractedStrings) // 输出 ["a", "b", "c"]

这样既简洁又符合Swift的语法特性,完全避开了嵌套循环的写法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:53:14