使用正确的索引反向枚举
Enumerating in reverse with correct indices
Swift 中一个很好的语法是能够像这样将数组的索引和条目枚举为循环:
for (index, entry) in enumerate(myArray) {
doSomething(index, entry)
}
也可以使用 reverse
条件从数组末尾轻松开始,如下所示:
for (index, entry) in enumerate(reverse(myArray)) {
doSomething(index, entry)
}
但是,问题在于 index
现在从数组末尾开始计数(即最后一个元素的索引为零),这意味着如果我需要索引值,则必须更正它对于 entry
在 myArray
中的实际位置,这失去了一些优雅。
另一种方法是这样做:
for (var index, entry) in enumerate(reverse(myArray)) {
index = (myArray.count - 1) - index
doSomething(index, entry)
}
这不是世界末日,但我想知道是否有一个我忽略的替代方案可以让我反向枚举,但返回正确的索引值?
当你将 reverse() 应用于一个数组时,结果已经是一个新数组,自然索引应该反映新数组。我找到了另一种反向枚举的方法,我想这已经足够优雅了:
let names = ["Jack", "Lucy", "Kate"]
for index in stride(from: count(names) - 1, through: 0, by: -1) {
println("\(index): \(names[index])")
}
这可能是一个解决方案:
let myArray = [1, 2, 3, 4]
for index in reverse(0..<myArray.count) {
println("\(index): \(myArray[index])")
}
编辑:
如果您真的不想通过 for
正文中的索引访问您的条目,您可以尝试:
for (index, entry) in zip(reverse(0..<myArray.count), reverse(myArray)) {
println("\(index): \(entry)")
}
或
for (index, entry) in reverse(0..<myArray.count)
.map({ ([=12=], myArray[[=12=]])}) {
println("\(index): \(entry)")
}
希望对您有所帮助
不要想的太复杂:
for var i = array.count - 1; i >= 0; i-- {
let item = array[i]
}
Swift 中一个很好的语法是能够像这样将数组的索引和条目枚举为循环:
for (index, entry) in enumerate(myArray) {
doSomething(index, entry)
}
也可以使用 reverse
条件从数组末尾轻松开始,如下所示:
for (index, entry) in enumerate(reverse(myArray)) {
doSomething(index, entry)
}
但是,问题在于 index
现在从数组末尾开始计数(即最后一个元素的索引为零),这意味着如果我需要索引值,则必须更正它对于 entry
在 myArray
中的实际位置,这失去了一些优雅。
另一种方法是这样做:
for (var index, entry) in enumerate(reverse(myArray)) {
index = (myArray.count - 1) - index
doSomething(index, entry)
}
这不是世界末日,但我想知道是否有一个我忽略的替代方案可以让我反向枚举,但返回正确的索引值?
当你将 reverse() 应用于一个数组时,结果已经是一个新数组,自然索引应该反映新数组。我找到了另一种反向枚举的方法,我想这已经足够优雅了:
let names = ["Jack", "Lucy", "Kate"]
for index in stride(from: count(names) - 1, through: 0, by: -1) {
println("\(index): \(names[index])")
}
这可能是一个解决方案:
let myArray = [1, 2, 3, 4]
for index in reverse(0..<myArray.count) {
println("\(index): \(myArray[index])")
}
编辑:
如果您真的不想通过 for
正文中的索引访问您的条目,您可以尝试:
for (index, entry) in zip(reverse(0..<myArray.count), reverse(myArray)) {
println("\(index): \(entry)")
}
或
for (index, entry) in reverse(0..<myArray.count)
.map({ ([=12=], myArray[[=12=]])}) {
println("\(index): \(entry)")
}
希望对您有所帮助
不要想的太复杂:
for var i = array.count - 1; i >= 0; i-- {
let item = array[i]
}