Code1:
let word = "Backwards"
for char in word.reversed() {
print(char, terminator: "")
}
Code 2:
var characters: [Character] = ["C", "a", "f", "é"]
characters.reverse()
print(characters)
What is the difference between these two codes?
答案 0 :(得分:2)
reversed()
返回与原始顺序相反的全新收藏
reverse()
自己反向收集
。答案 1 :(得分:1)
以下是差异
代码1:创建一个迭代器以相反的顺序遍历
let word = "Backwards"
for char in word.reversed() {
print(char, terminator: "")
}
代码2:撤消内容
var characters: [Character] = ["C", "a", "f", "é"]
characters.reverse()
print(characters)
答案 2 :(得分:1)
您自己完美地暴露了差异。您要做的就是查看自己的代码。
characters.reverse()
更改characters
的值。
但是word.reversed()
保持word
不变。
答案 3 :(得分:0)
我认为 reverse
和 reversed
的一个重要缺失方面是它们的时间复杂度。
除了 reverse
是在集合上定义的变异函数并且 reversed
完全返回一个新对象这一事实之外,reverse
的时间复杂度是 O(n)< /strong> 和 reversed
是 O(1)。
O(1) 时间复杂度似乎令人惊讶,但是如果我们查看 reversed
调用的返回类型,它会返回 ReversedCollection
对象,该对象在内部指向原始集合,除非是原始集合内容被修改。所以基本上它只是以相反的方式呈现/访问基本集合的元素以节省时间和内存。
以下示例表明,除非修改,否则反转数组与原始数组保持相同:
var originalArray = [1, 2, 3]
var reversedArray = originalArray.reversed()
print("0th index of OriginalArray \(originalArray[0])")
print("0th index of ReversedBaseArray \(reversedArray._base[0])")
print("0th index of OriginalArray \(originalArray.first)")
print("0th index of ReversedBaseArray \(reversedArray.first)")
originalArray[0] = 4 // Modification makes a separate copy of each instance
print("0th index of OriginalArray \(originalArray[1])")
print("0th index of ReversedBaseArray \(reversedArray._base[1])")
// Console Output:
// 0th index of OriginalArray 1
// 0th index of ReversedBaseArray 1
// First element of OriginalArray Optional(1)
// First element of ReversedBaseArray Optional(3)
// 0th index of OriginalArray 4
// 0th index of ReversedBaseArray 1