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

Swift中flatMap扁平化数组后无法切片?求解决方法

问题原因与解决方法

错误原因

Swift数组的下标(包括范围下标)要求索引为Int类型,但你的代码中left和right参数是Int64类型,类型不匹配导致系统找不到对应的下标实现,因此抛出no exact matches in call to subscript错误。

另外需要注意:数组切片操作返回的是ArraySlice<Int>类型,而你的函数声明返回[Int](即Array<Int>),两者类型不兼容,直接返回切片也会报错。

解决步骤

  1. 将Int64类型的left和right转换为Int类型,匹配数组下标要求;
  2. 使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:10:36