加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 后缀(来自:)和dropFirst(_ :)之间有什么区别吗?

发布时间:2020-12-14 05:41:14 所属栏目:百科 来源:网络整理
导读:我突然想到在使用 Swift中的子序列时, func后缀(来自:Int)似乎与dropFirst(_ :)完全相同(显然,在长度为“10”的数组中,您只需将输入值从“3”更改为“7”.) 只是重复一遍.所以:当然,对于一个长度为十的数组.我的意思是func后缀(来自:Int)与“2”将与dropF
我突然想到在使用 Swift中的子序列时,

func后缀(来自:Int)似乎与dropFirst(_ :)完全相同(显然,在长度为“10”的数组中,您只需将输入值从“3”更改为“7”.)

只是重复一遍.所以:当然,对于一个长度为十的数组.我的意思是func后缀(来自:Int)与“2”将与dropFirst(_ :)与“8”相同,例如.

同样upTo / through似乎与dropLast(_ :)完全相同

除了方便之外还有什么区别吗?

(也许是在错误的条件,性能或?)

我想知道,事实上,在Swift中是否只是通过调用另一个来实现?

它们完全不同.

> suffix(from:)

>由Collection协议定义.
>从给定的起始Index返回Subsequence.
>记录O(1)的时间复杂度(你可以see its default implementation here).
>如果传递的索引超出范围,则运行时错误.

> dropFirst(_:)

>由Sequence协议定义.
>返回SubSequence,其中从序列的头部删除了给定的最大元素数.
>记录的时间复杂度为O(n)*.虽然its default implementation实际上具有O(1)的时间复杂度,但这只是推迟了O(n)遍历删除元素直到迭代.
>如果输入的数字大于序列的长度,则返回空子序列.

*与所有协议要求记录的时间复杂性一样,符合类型可能具有较低时间复杂度的实现.例如,RandomAccessCollection的dropFirst(_ :)方法将在O(1)时间内运行.

但是,当涉及到Array时,这些方法的行为恰好相同(除了处理超出范围的输入).

这是因为Array的Int类型的索引从0开始并按顺序计数到array.count – 1,因此意味着删除前n个元素的子序列是从索引n开始的相同子序列.

同样因为Array是RandomAccessCollection,两种方法都将在O(1)时间内运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读