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 从数组中随机取出指定个数的随机元素
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...