arrays - 如何创建一个无限循环固定数量元素的数组

标签 arrays swift

我正在尝试创建 Array 的子类(好的,Arraystruct,所以我不能那样做,但是忍耐一下)。 Array 将包含有限数量的元素(就像所有数组一样),但不可能返回 out of range 错误,因为将应用模运算用于访问数组的任何索引。

let loopArray: LoopArray<Int> = [1, 2, 3, 4, 5]
print("Element at position 5 = \(loopArray[5])"

如果这是一个普通数组,它会因超出范围的异常而崩溃。但是因为它是一个循环数组,所以这里的输出将是

Element as position 5 = 1

我希望数组表现正常。如果执行 mapfilter 等操作,它只会按预期对实际 元素执行。

最佳答案

这是一个执行此操作的扩展程序:

extension Array {
    subscript(loopingIndex loopingIndex: Int) -> Element {
        get { return self[loopingIndex % self.count] }
        set { self[loopingIndex % self.count] = newValue }
    }
}

示例用法:

let loopArray = [1, 2, 3]
loopArray[loopingIndex: 5]

因为 Array 是一个结构,所以创建一个与 Array 完全相同但只有 下标 的全新类型的唯一方法> 不同的实现方式是复制Array中除下标以外的所有代码。因此,我建议你写一个扩展。但是,扩展的问题在于您必须使用带有参数标签的下标,因为没有参数标签的下标已经存在于 Array 中。

关于arrays - 如何创建一个无限循环固定数量元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121877/

相关文章:

python - 在 Numpy 下对两个矩阵中的所有成对行应用一个函数

ios - Swift GameKit 在 Arc 中移动 Sprite

swift - 获取用于启动 OS X 应用程序的初始 URL

swift - 如何在 UICollectionView 中加载列数

ios - Swift - 滚动 Collection View 时标签移动到单元格的左上角

JavaScript ES6 - 计算对象数组的重复项

javascript - 交替 ng 重复

c++ - 如果我们删除 [-Wreturn-local-addr] 可以吗(警告 : address of local variable returned) by using static keyword in c++?

ios - 切换 map : error: cannot invoke 'map' with an argument list of type '((_) -> _)'

javascript - Lodash 在其他数组项中搜索数组项