当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift UnsafeMutableBufferPointer partition(by:)用法及代码示例


实例方法

partition(by:)

对集合的元素重新排序,使得与给定谓词匹配的所有元素都在所有不匹配的元素之后。

声明

mutating func partition(by belongsInSecondPartition: (Self.Element) throws -> Bool) rethrows -> Self.Index
Self 符合 BidirectionalCollection 时可用。

返回值

重新排序的集合中与 belongsInSecondPartition 匹配的第一个元素的索引。如果集合中没有元素匹配 belongsInSecondPartition ,则返回的索引等于集合的 endIndex

参数

belongsInSecondPartition

用于对集合进行分区的谓词。所有满足这个谓词的元素都排在所有不满足它的元素之后。

详述

对集合进行分区后,有一个枢轴索引 p ,其中 p 之前的任何元素都不满足 belongsInSecondPartition 谓词,而 p 或之后的每个元素都满足 belongsInSecondPartition 。此操作不能保证稳定,因此分区内元素的相对顺序可能会发生变化。

在以下示例中,数字数组由匹配大于 30 的元素的谓词进行分区。


var numbers = [30, 40, 20, 30, 30, 60, 10]
let p = numbers.partition(by: { $0 > 30 })
// p == 5
// numbers == [30, 10, 20, 30, 30, 60, 40]

numbers 数组现在排列在两个分区中。第一个分区 numbers[..<p] 由不大于 30 的元素组成。第二个分区 numbers[p...]are 大于 30 的元素组成。


let first = numbers[..<p]
// first == [30, 10, 20, 30, 30]
let second = numbers[p...]
// second == [60, 40]

请注意,两个分区中元素的顺序发生了变化。也就是说,40 在原始集合中出现在 60 之前,但是在调用 partition(by:) 之后,60 出现在 40 之前。

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 UnsafeMutableBufferPointer partition(by:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。