gpt4 book ai didi

swift - 如何总共有 10 个字符并确保至少随机使用 4 个不同集合中的一个字符

转载 作者:行者123 更新时间:2023-11-28 06:44:24 25 4
gpt4 key购买 nike

我有一个文本字段和一个生成一组随机字符的按钮。设置 1 = 小写,设置 2 = 大写,设置 3 = 数字,设置 4 = 符号

我希望按钮生成不少于 10 个字符,并且至少从每个集合中拉出至少一次。

到目前为止我的想法是

let roomIDGenerated = uniqueRoomID.text

let roomIDCount = roomIDGenerated?.characters.count

let randomCharacterSet = arc4random() upp

while roomIDCount < 10 {
<#code#>
}

但我不知道该怎么做......我并不总是希望前 4 个字符始终是每个字符中的一个......也许最后使用了一个必需的集合。

我有点陷入困境,任何帮助将不胜感激

最佳答案

Martin 的评论与我采用的方法相同。这是我的实现:

extension CollectionType {
var random: Generator.Element {
guard !isEmpty else { fatalError("array cannot be empty") }
let array = Array(self)
return array[Int(arc4random_uniform(UInt32(array.count)))]
}
}

// from http://stackoverflow.com/a/24029847/1223781
extension MutableCollectionType where Index == Int {
func shuffled() -> Self {
var copy = self
copy.shuffle()
return copy
}

mutating func shuffle() {
guard count >= 2 else { return }

for i in 0..<count - 1 {
let j = Int(arc4random_uniform(UInt32(count - i))) + i
guard i != j else { continue }
swap(&self[i], &self[j])
}
}
}

let sets = ["abc", "ABC", "123", "#$%"].map { Array($0.characters) }
let size = 10

var randoms = sets.map { $0.random }
while randoms.count < 10 {
randoms.append(sets.random.random)
}
print(randoms.shuffled()) // ["b", "b", "3", "c", "#", "%", "A", "#", "1", "%"]

关于swift - 如何总共有 10 个字符并确保至少随机使用 4 个不同集合中的一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36931474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com