假设我有一个像30这样的Int,我如何将范围数乘以7并将它们放入SWIFT中的配对列表中?

例如,在这种情况下,它将是[(1,7),(8,14),(15,21),(22,28),(29,30)],其中最后一对是29-30.

我在Kotlin找到了一个可以做到这一点的代码,但我不知道它怎么会在Swift中实现,因为我不认识Kotlin.我把它贴出来,以防它有帮助.

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)

最新情况:

到目前为止,我try 了以下代码:

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)
                    }
                }
            }

输出结果为:

  • 0:1
      • 1:7
      • 2:8
      • 3:14
      • 4:15
      • 5:21
      • 6:22
      • 7:28
      • 8:29
      • 9:35

都很好,但35号应该是30号.

我相信有更好的办法.

推荐答案

柯特林密码

(1..myInt step 7).map { it to min(it + 6, myInt) }

在一条 comments 中建议的这句话几乎可以字面上翻译成SWIFT.

对于stride(),您可以创建序列1、8、15、...、29;使用map(),您可以将每个值映射到一个元组:

let days = 30
let list = stride(from: 1, to: days, by: 7).map { ($0, min($0+6, days)) }
print(list)
// [(1, 7), (8, 14), (15, 21), (22, 28), (29, 30)]

Swift相关问答推荐

防止NavigationLink自行返回导航视图

Form中的Divider在macOS上并不完全扩展

日期格式yyyyyy—MM—dd hh:mm:ss +0000到dd MMM,以swift格式表示""""

Swift C外部实现的Task / Future类类型

插入/删除视图时的Swiftui动态过渡

SWIFT异步/等待,多个监听程序

从`compactMap()`闭包返回`nil`未通过结果类型判断

如何为我的项目设置生命周期选项?

可以将属性名称传递给 Swift 中的函数吗?

数组中某些元素的总和

XCUITest 在 TearDown 期间随机失败-无法终止 com.bundle.id

如何使用 Swinject 注册符合 ObservableObject 的协议?

SwiftUI:当先前的视图列表更改时,NavigationView 详细视图会弹出回栈

Vapor - 流利的,将对象保存到 PostgreSQL

如何使被拖动的对象成为前景(foreground)对象

Swift 2 或 3 中的 Google Analytics 问题

如果没有标记,则为 Swift 预处理器

Swift 中的 PageViewController 当前页面索引

将强制向下转换视为可选将永远不会产生零

两个 Date 对象之间的所有日期 (Swift)