【发布时间】:2022-01-24 13:15:50
【问题描述】:
我正在尝试做这样的事情:
func fullOrSubarray(array: [Int]) -> ReturnType {
return array.count < 10 ? array : array[0..<10]
}
当我试图返回Array<Int> 或ArraySlice<Int> 时,我应该写什么到ReturnType?
我知道我可以简单地将ArraySlice<Int> 转换为Array<Int>(反之亦然),但出于性能原因我不想这样做。我想返回一些通用集合或迭代器类型,但 Swift 似乎没有。我是否必须为这样的事情编写自定义迭代器?其他语言有各种通用迭代器,所以我可以互换返回 Array、Set 等。
【问题讨论】:
-
将 Array 转换为 ArraySlice 的性能问题是什么?那应该几乎是免费的。
-
另外,你可能想看看 stdlib 是如何做这种事情的。例如,您在这里写的正是
prefix。我知道你也可能在做其他事情,但是看看prefix是如何实现的,你应该了解如何做好这件事:github.com/apple/swift/blob/main/stdlib/public/core/… -
要将集合转换为子序列(Array -> ArraySlice),您可以使用UnboundedRange operator
array[...]这会将完整数组作为数组切片返回
标签: arrays swift collections iterator