swift中reverse()和reversed()之间的差异
代码1: 代码2:swift中reverse()和reversed()之间的差异,swift,Swift,代码1: 代码2: let word = "Backwards" for char in word.reversed() { print(char, terminator: "") } 这两种代码之间的区别是什么?reversed() 以与原始集合相反的顺序返回全新集合 反向() 反向收集它自己。反向() 以与原始集合相反的顺序返回全新集合 反向() 反向收集它自己。以下是不同之处 代码1:创建一个迭代器以按相反顺序遍历 代码2:反转内容 以下是差异 代码1:创建一个迭代器以按相反顺序
let word = "Backwards"
for char in word.reversed() {
print(char, terminator: "")
}
这两种代码之间的区别是什么?reversed()
以与原始集合相反的顺序返回全新集合
反向()
反向收集它自己。反向()
以与原始集合相反的顺序返回全新集合
反向()
反向收集它自己。以下是不同之处 代码1:创建一个迭代器以按相反顺序遍历 代码2:反转内容
以下是差异 代码1:创建一个迭代器以按相反顺序遍历 代码2:反转内容
你自己完全暴露了这一差异。您所要做的就是查看自己的代码
更改characters.reverse()
字符的值
- 但是
保持word.reversed()
不变word
更改characters.reverse()
字符的值
- 但是
保持word.reversed()
不变word
- 你自己完美地暴露了这种差异。您所要做的就是查看自己的代码
- 我认为
反向
和反向
的一个重要缺失方面是它们的时间复杂性
除了
reverse
是在集合上定义的变异函数,并且reversed
返回一个新对象之外,reverse
的时间复杂度是O(n),reversed
是O(1)
O(1)时间复杂度似乎令人惊讶,但如果我们查看reversed
调用的返回类型,它返回ReversedCollection
对象,除非修改原始内容,否则该对象在内部指向原始集合。因此,基本上,它只是以相反的方式呈现/访问基本集合的元素,以节省时间和内存
下面的示例显示,反转数组与原始数组保持相同,除非对其进行修改:
var characters: [Character] = ["C", "a", "f", "é"]
characters.reverse()
print(characters)
我认为
reverse
和reversed
的一个重要缺失是它们的时间复杂性
除了
reverse
是在集合上定义的变异函数,并且reversed
返回一个新对象之外,reverse
的时间复杂度是O(n),reversed
是O(1)
O(1)时间复杂度似乎令人惊讶,但如果我们查看reversed
调用的返回类型,它返回ReversedCollection
对象,除非修改原始内容,否则该对象在内部指向原始集合。因此,基本上,它只是以相反的方式呈现/访问基本集合的元素,以节省时间和内存
下面的示例显示,反转数组与原始数组保持相同,除非对其进行修改:
var characters: [Character] = ["C", "a", "f", "é"]
characters.reverse()
print(characters)
reverse
更改对象(也称为“破坏性操作”,因为原始对象不再可用),reversed
创建新对象(“非破坏性操作”)。您编写了代码。你不明白哪一部分?不,输出非常不同。这两个区块做两件完全不同的事情。是的,有一个显著的区别。reverse
更改对象(也称为“破坏性操作”,因为原始对象不再可用),reversed
创建一个新对象(“非破坏性操作”)。您编写了代码。你不明白哪一部分?不,输出非常不同。这两个区块做两件完全不同的事情。是的,这是一个显著的区别。reversed()
返回一个集合,而不是数组。reversed()
返回一个集合,而不是数组。
var characters: [Character] = ["C", "a", "f", "é"]
characters.reverse()
print(characters)
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