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

Swift 如何实现可扩展的数组整除规则打印方案

高可扩展规则打印实现方案

原有硬编码if-else互斥判断的写法,每新增1条规则就要新增成倍的组合分支,维护成本会随规则数量指数上升。核心优化思路是将规则定义和匹配逻辑完全解耦,不需要手动编写多规则组合的判断分支,匹配到的规则对应字符自动拼接即可。

核心实现逻辑

我们把每条规则拆成「匹配条件」+「对应输出字符」两个部分,统一存在规则列表中:

  • 遍历数字时,逐个检查所有规则,只要满足匹配条件就把对应字符追加到结果中
  • 如果最终拼接的结果为空,说明没匹配到任何规则,直接输出原数字
  • 所有多规则同时命中的组合场景(比如同时被4/5/8整除)会自动拼接出对应结果,不需要单独写分支判断

基础版(仅支持整除规则,配置最简单)

// 规则配置区:新增/修改规则仅需改动这部分,核心逻辑无需调整
// 注意:规则在数组中的顺序就是最终输出字符的拼接顺序
let divideRules: [(divisor: Int, output: String)] = [
    (4, "A"),
    (5, "B"),
    (8, "C")
    // 未来新增整除规则,比如被3整除输出"D",直接在这里加一行 (3, "D") 即可
]

for number in 1...100 {
    var printContent = ""
    for rule in divideRules {
        if number.isMultiple(of: rule.divisor) {
            printContent.append(rule.output)
        }
    }
    // 无匹配规则输出原数字,否则输出拼接结果
    print(printContent.isEmpty ? number : printContent)
}

这个版本运行后,会自动符合你提的组合规则要求:

  • 仅被4整除输出A
  • 仅被5整除输出B
  • 同时被4、8整除输出AC(注:数学上8的倍数必然是4的倍数,不存在仅被8整除不被4整除的整数,和你描述的规则完全一致)
  • 同时被4、5整除输出AB
  • 同时被5、8整除输出BC
  • 同时被4、5、8整除输出ABC

进阶版(支持任意复杂规则)

如果后续需要新增非整除类的规则(比如数字大于90输出特殊标记、是偶数输出特殊字符等),可以把规则抽象成结构体,用闭包自定义匹配逻辑,扩展性更强:

// 通用规则结构体,支持任意匹配逻辑
struct PrintRule {
    let isMatch: (Int) -> Bool
    let output: String
}

// 规则配置区
let rules: [PrintRule] = [
    PrintRule(isMatch: { $0.isMultiple(of: 4) }, output: "A"),
    PrintRule(isMatch: { $0.isMultiple(of: 5) }, output: "B"),
    PrintRule(isMatch: { $0.isMultiple(of: 8) }, output: "C"),
    // 举个例子:新增规则 数字大于90 输出"*",直接加下面这行即可
    // PrintRule(isMatch: { $0 > 90 }, output: "*")
]

for number in 1...100 {
    let result = rules.reduce("") { partialRes, rule in
        rule.isMatch(number) ? partialRes + rule.output : partialRes
    }
    print(result.isEmpty ? number : result)
}

方案优势

  • 新增规则零侵入:不管加多少条规则,都只需要在规则配置数组里新增条目,不需要改动核心遍历、匹配逻辑,不会引入老逻辑故障
  • 自动支持所有组合:N条规则天然支持2^N种组合场景,完全不需要手动编写多条件同时满足的判断分支
  • 输出顺序可控:调整规则在数组中的排列顺序,就能直接调整最终输出字符的拼接顺序,不需要改判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:51:48