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

Swift如何实现数组字符串中大于12的整数值按条件做常量减法

可落地实现方案

核心处理逻辑

  • 规避原写法中固定拆分两段导致的越界风险,用通用的批量处理逻辑兼容任意数量、任意长度的区间格式
  • 严格遵循转换规则:对字符串内解析出的所有整数,判断值是否大于12,满足条件则减去固定常量12,否则保留原值
  • 转换完成后严格匹配原始字符串的分隔符结构(逗号分隔不同区间,横杠分隔单个区间的首尾值)拼接结果,保证格式和输入完全一致

完整可运行代码

// 固定扣除的常量值
let offset: Int = 12

/// 处理单条区间格式字符串的通用方法
/// - Parameter input: 形如 "x1-y1,x2-y2" 的原始区间字符串
/// - Returns: 完成数值转换后的同格式字符串
func processIntervalString(_ input: String) -> String {
    // 按逗号拆分所有独立区间段
    let intervalGroups = input.components(separatedBy: ",")
    let processedGroups = intervalGroups.map { segment in
        // 拆分单个区间的首尾数值
        let valueComponents = segment.components(separatedBy: "-")
        let processedValues = valueComponents.map { valueStr in
            guard let number = Int(valueStr) else { return valueStr }
            // 大于12的数值扣除固定常量,其余保留原值
            return number > 12 ? String(number - offset) : String(number)
        }
        // 用横杠拼回单个区间的完整内容
        return processedValues.joined(separator: "-")
    }
    // 用逗号拼回所有区间段的完整内容
    return processedGroups.joined(separator: ",")
}

func test() {
    // 你原代码中的带竖线分隔的长字符串
    let hours = "11-16,20-23|11-16,20-23|11-16,20-23|11-16,20-23|13-17,20-24|11-16,20-23|11-16,20-23"
    // 先拆分得到基础字符串数组
    let originalArray = hours.components(separatedBy: "|")
    // 批量对数组元素做转换处理
    let resultArray = originalArray.map { processIntervalString($0) }
    
    print(resultArray)
    // 实际输出验证:
    // ["11-4,8-11", "11-4,8-11", "11-4,8-11", "11-4,8-11", "1-5,8-12", "11-4,8-11", "11-4,8-11"]
    // 完全匹配你预期的转换规则
}

和原写法的优化点

  • 原写法固定把每个元素拆成前后两段存入两个独立数组,一旦遇到逗号分隔的区间数量不是2个的场景,就会触发数组越界崩溃,上述通用处理逻辑不依赖固定的区间数量,任意结构的区间字符串都能正常兼容
  • 原写法仅完成了字符串拆分,没有实现「字符串转整数-大小判断-数值计算-转回字符串」的核心转换流程,上述代码补全了完整的处理链路
  • 原写法拆分后没有按原格式做字符串拼接,上述逻辑会严格匹配原输入的分隔符位置还原结果,不会出现格式错乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 01:45:02