首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在删除/删除元素时获得`[元素]‘而不是’`SubSequence`‘?

如何在删除/删除元素时获得`[元素]‘而不是’`SubSequence`‘?
EN

Stack Overflow用户
提问于 2022-01-21 23:55:28
回答 1查看 83关注 0票数 2

如果从数组中删除元素并将其存储在如下变量中:

代码语言:javascript
复制
let lastFive = myArray.suffix(5)

或者这个:

代码语言:javascript
复制
let lastFive = myArray.dropLast(5)

lastFive将是Array<SomeType>.SubSequence,而不是元素类型SomeType。如何使lastFive成为[Element]而不是SubSequence

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 01:59:36

我喜欢使用这个分机:

代码语言:javascript
复制
extension Sequence {
    func asArray() -> [Element] {
        return Array(self)
    }
}

也就是说,CollectionSequence协议都定义了一个sequence()方法。

Sequence.prefix()返回[Element],而Collection.prefix()返回SubSequence

给定定义如下的Array,我们可以做一些有趣的事情。

代码语言:javascript
复制
let myArray = [1, 2, 3, 4, 5]

以下操作是因为编译器知道如何使用Sequence版本的suffix()

代码语言:javascript
复制
func lastFive() -> [Int] {
    return myArray.suffix(5)
}

这里我只是使用上面的分机。

代码语言:javascript
复制
func lastFive2() -> [Int] {
    return myArray.suffix(5).asArray()
}

以下操作也是因为编译器知道如何使用Sequence版本的suffix()

代码语言:javascript
复制
func lastFive3() -> [Int] {
    let suffix: [Int] = myArray.suffix(5)
    return suffix
}

这不编译,因为编译器假定您想使用Collection版本的suffix()

代码语言:javascript
复制
func doesNotCompile() -> [Int] {
    let suffix = myArray.suffix(5)
    return suffix
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70808843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档