arrays - 使用模数运算符重置索引如何工作?

标签 arrays swift indexing modulus

我知道模数会返回除法的余数,但我不明白当您需要重置数组索引时它是如何工作的。

假设我们有这段代码:

let numbers = [1, 2, 3]
let index = 0

for 1...6 {
    let item = numbers[index % numbers.count]
    print(item)
    index += 1
}

我理解index之前的操作等于numbers.count,会返回index。我还了解到,当索引达到 3,即数组中的项目数时,它将返回 0(这将显示数组的第一项)。但是,我不明白它是如何继续按顺序显示数组的。

如果index为4,那么运算就是4除以3,余数为1。那么,显示的数字应该是1,2,3,1,1吧?我的意思是,索引永远不会被分配回 0,所以它只会继续递增。

到达数组末尾后,重置索引的模数方法如何工作?

为什么模数方法比下面重置索引的方法更好?

if index >= numbers.count {
    index = 0
}

最佳答案

您的描述有一点偏差。 index 从 0 开始迭代,而不是 1(不要将行 for 1...6index 的值混淆。

计算一下。您将 index 从 0 迭代到 5。numbers.count 为 3。

对于每个索引,结果是index % numbers.count

index:   0 1 2 3 4 5
result:  0 1 2 0 1 2
item:    1 2 3 1 2 3

关于arrays - 使用模数运算符重置索引如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017928/

相关文章:

matlab - 如何使用 max 或 min 返回的多维索引?

c# - 数组索引可以在 C# 中命名吗?

arrays - 是否可以在不使用“Array.map box”的情况下将“T []参数传递给需要obj []的函数?

arrays - 用于查找自定义类型索引的数组扩展

处理程序 block 的 Swift 数组

ios - 我如何像在 Objective C 宏中声明那样全局声明变量或函数

c# - 数组指针线程安全

ruby - 如何在 Ruby 中将人类可读的数字转换为计算机可读的数字?

ios - 在整个应用程序中使用单个 Realm 实例/变量

MySQL正在做全表筛选