extension Array {
/// 从数组中返回一个随机元素
public var sample: Element? {
//如果数组为空,则返回nil
guard count > 0 else { return nil }
let randomIndex = Int(arc4random_uniform(UInt32(count)))
return self[randomIndex]
}
/// 从数组中从返回指定个数的元素
///
/// - Parameters:
/// - size: 希望返回的元素个数
/// - noRepeat: 返回的元素是否不可以重复(默认为true,不可以重复)
public func sample(size: Int, noRepeat: Bool = true) -> [Element]? {
//如果数组为空,则返回nil
guard !isEmpty else { return nil }
var sampleElements: [Element] = []
//返回的元素可以重复的情况
if !noRepeat {
for _ in 0..<size {
sampleElements.append(sample!)
}
}
//返回的元素不可以重复的情况
else{
//先复制一个新数组
var copy = self.map { $0 }
for _ in 0..<size {
//当元素不能重复时,最多只能返回原数组个数的元素
if copy.isEmpty { break }
let randomIndex = Int(arc4random_uniform(UInt32(copy.count)))
let element = copy[randomIndex]
sampleElements.append(element)
//每取出一个元素则将其从复制出来的新数组中移除
copy.remove(at: randomIndex)
}
}
return sampleElements
}
}
swift 从数组中随机取出指定个数的随机元素
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。