Swift 不使用任何方法反转数组(反转、追加等)
有一个方法.reversed(),但我一直试图做的是在不使用任何方法的情况下反转数组(.append,.count,.dropLast等) 在我的代码中,我使用了append方法,但我想去掉它 有人能给我解释一下吗?我试图理解方法是如何实际工作的Swift 不使用任何方法反转数组(反转、追加等),swift,Swift,有一个方法.reversed(),但我一直试图做的是在不使用任何方法的情况下反转数组(.append,.count,.dropLast等) 在我的代码中,我使用了append方法,但我想去掉它 有人能给我解释一下吗?我试图理解方法是如何实际工作的 func reverseArray(array: [Int]) -> [Int] { var length = 0 var array2: [Int] = [] for _ in array { leng
func reverseArray(array: [Int]) -> [Int] {
var length = 0
var array2: [Int] = []
for _ in array {
length += 1
}
while length>0 {
array2.append(array[length - 1])
length = length - 1
}
return array2
}
var sequence = [0,1,2,3,4,5,6,7,8,9]
reverseArray(array:sequence)
我不确定您为什么要这样做,但为了解决您的具体问题,您可以将该值包装在第二个数组中,然后用串联替换append
:
array2 += [array[length - 1]]
如果不使用任何方法,就无法编写代码。像
array[length-1]
这样的代码实际上是在进行方法调用,以获取数组中特定索引处的值。数组存储自身的计数,因此可以快速访问,而无需迭代所有元素。此外,它必须知道计数,这样才能知道终点在哪里,这样才能在终点停止迭代count
不是一个方法,它是一个计算属性。您的length
计算在技术上是正确的,但是for
调用方法:一次调用Array.makeIterator()
,和n+1
调用索引迭代器.next()
。与您的问题无关,但在订阅数组length-=1
,然后array2.append(array[length])
之前减少长度会更容易。或者按照John的建议array2+=[array[length]]
`您是在尝试摆脱所有方法调用,还是仅仅是方法调用的外观?因为前者是不可能的,除非您完全用一种方法重新实现Array
。