arrays - 按给定索引开始的顺序遍历数组中的所有元素

标签 arrays swift

比如说,我有一个数组 let array = [ "foo", "bar", "baz", "foobar", "qux"] 和这个数组中的索引 3。我想按以下顺序迭代数组中的所有元素 foobar(索引 3 处的元素)、qux(索引 4 处)、foo (在索引 0 处等)、barbaz

不太优雅的解决方案看起来像这样:

for index in givenIndex ..< array.endIndex {
  // do some work with array[index]
}

for index in array.startIndex ..< givenIndex {
  // do the same work with array[index]
}

有没有更优雅的解决方案?

最佳答案

扩展和 % 运算符应该可以工作:

extension CollectionType where Index : IntegerType, Index.Distance == Index {
  func offset(by: Index) -> [Generator.Element] {
    guard by >= 0 else { return offset(by+count) }
    return (by..<(by+count))
      .map { i in self[i % count + startIndex] }
  }
}


let array = [ "foo", "bar", "baz", "foobar", "qux" ]

array.offset( 1) // ["foobar", "qux", "foo", "bar", "baz"]
array.offset(-1) // ["qux", "foo", "bar", "baz", "foobar"]

let s = array.suffixFrom(2) // ["baz", "foobar", "qux"]

s.offset( 1) // ["foobar", "qux", "baz"]
s.offset(-1) // ["qux", "baz", "foobar"]

关于arrays - 按给定索引开始的顺序遍历数组中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013114/

相关文章:

c++ - 为 3D 数组定义 setter/getter 属性

c++ - 重载 = 运算符时返回对象的深层拷贝

java - 将文本文件中的矩阵存储到二维数组中

reactjs - 如何使用 MUI 的数据网格对多值数组列启用过滤和排序?

ios - 如何在父 View 的 Controller 中处理 subview 的手势事件?

java - 多维数组的时间复杂度(每次切割成四分之一时)

objective-c - 如何处理在 Obj C 或 Swift 中返回对象或 nil 的 Core Data 自定义方法

iOS WebView 空白间隙

ios - Swift 中的 NSTextStorage 子类不更新 UITextView

ios - 在 tableView 上拉动刷新