Swift中flatMap扁平化数组后无法切片?求解决方法
问题原因与解决方法
错误原因
Swift数组的下标(包括范围下标)要求索引为Int类型,但你的代码中left和right参数是Int64类型,类型不匹配导致系统找不到对应的下标实现,因此抛出no exact matches in call to subscript错误。
另外需要注意:数组切片操作返回的是ArraySlice<Int>类型,而你的函数声明返回[Int](即Array<Int>),两者类型不兼容,直接返回切片也会报错。
解决步骤
- 将
Int64类型的left和right转换为Int类型,匹配数组下标要求; - 使用
Array()将切片结果转换为标准数组类型,满足函数返回值要求。
修改后的完整代码
import Foundation func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] { var array: [[Int]] = [] for i in 1...n { var tmp: [Int] = [] for _ in 0..<i { tmp.append(i) } for j in (i+1)..<(n+1) { tmp.append(j) } array.append(tmp) } var result = array.flatMap { $0 } // 转换索引类型并将切片转为数组 return Array(result[Int(left)...Int(right)]) } print(solution(3, 2, 5)) // 输出 [2, 3, 1, 2]
额外说明
如果运行环境是32位系统,Int的最大值为2^31-1,若left/right数值超过该范围,类型转换会崩溃。但在大多数算法题场景或64位环境中,这种转换是安全的。
内容的提问来源于stack exchange,提问作者SOWOL KIM
相关产品推荐
相关产品推荐

