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

Swift中如何将整数(如30)按7分组为整数对列表?

如何在Swift中将整数按固定间隔分割为整数对列表?

假设我有一个整数(如30),需要在Swift中将其按7为间隔分割成整数对并放入列表,预期结果应为:

[(1, 7), (8, 14), (15, 21), (22, 28), (29, 30)]

最后一组需处理剩余的数(比如29到30)。

我找到了一段可实现该功能的Kotlin代码,但看不懂Kotlin,不知道怎么转成Swift:

val myInt = 28
val list = (1..ceil(myInt/7.0).toInt()).mapIndexed { index, i ->
    7*index + 1 to (7*index + 7).coerceAtMost(myInt)
}

print(list)

我的尝试与问题

我写了一段Swift代码,但输出有问题:

var days = 30
var daysInt: [Int] = []
var index = 0
      
for i in 1...days {
    if index <= days {
        if i == 1 {
            index += 1
            daysInt.append(index)
            index += 6
            daysInt.append(index)
        } else {
            index += 1
            daysInt.append(index)
            index += 6
            daysInt.append(index)
        }
    }
}

输出结果最后出现了35,而不是预期的30,而且实现方式看起来不够简洁。


最优Swift实现

直接参考Kotlin的思路,转成Swift代码如下:

let myInt = 30
let groupCount = Int(ceil(Double(myInt) / 7))
let pairs = (1...groupCount).mapIndexed { index, _ in
    let start = 7 * index + 1
    let end = min(7 * index + 7, myInt)
    return (start, end)
}

print(pairs)
// 输出:[(1, 7), (8, 14), (15, 21), (22, 28), (29, 30)]

代码解释

  1. 计算组数:用ceil(Double(myInt)/7)算出需要分成多少组,比如30除以7约等于4.285,向上取整就是5组。
  2. 生成每一组:通过mapIndexed遍历每组的索引,计算每组的起始值7*index+1,结束值则用min确保不超过目标整数myInt,避免最后一组超出范围。
  3. 返回元组列表:直接生成包含整数对的数组,符合预期格式。

你的代码问题分析

  • 循环逻辑冗余:不需要遍历1到days的所有数,只需要遍历组数即可。
  • 未限制最大值:最后一组的结束值没有判断是否超过days,导致出现35这种超出目标的数。
  • 存储格式错误:你把所有数存在一个一维数组里,而不是整数对的元组数组,不符合需求的结构。

内容的提问来源于stack exchange,提问作者I Don't Tell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:06:51