Swift如何在嵌套数组(数组的数组)中查找指定元素的首个索引
错误原因分析
你的代码无法得到正确结果的核心原因有两个:
- 你定义的
arr是二维嵌套数组,first(where:)遍历到的$0是外层数组的子元素,也就是[("aa",1),("b",2)]这类子数组,不是子数组内部的元组,直接调用$0.1语法本身不成立 - 你要匹配的字符串
dd是元组的第一个元素,对应元组下标为.0,你写的.1取的是元组第二个位置的数值,匹配逻辑本身也不对
实现方案
根据你需要的索引维度,有两种常用实现方式:
场景1:仅需要获取dd所在外层子数组的索引
直接用firstIndex(where:)结合子数组的contains判断即可:
let outerIndex = arr.firstIndex { subArr in subArr.contains { $0.0 == "dd" } } // 输出可选值1,也就是dd在第二个外层子数组中(索引从0开始计数)
场景2:需要同时获取外层索引、内层元组在子数组中的索引
遍历外层数组的同时遍历子数组,找到匹配项后立即终止遍历即可:
var targetPosition: (outer: Int, inner: Int)? for (outerIdx, subArr) in arr.enumerated() { guard let innerIdx = subArr.firstIndex(where: { $0.0 == "dd" }) else { continue } targetPosition = (outerIdx, innerIdx) break } // 取值示例 if let pos = targetPosition { print("外层索引:\(pos.outer),内层索引:\(pos.inner)") // 输出 外层索引:1,内层索引:1 }
内容的提问来源于stack exchange,提问作者Usman
相关产品推荐
相关产品推荐

