swift - 快速添加随机字母数字字符串的每个第 n 个字符
问题描述
我试图通过在每个第三个字符之后向字符串添加一个随机字母数字字符来进行简单的加密。在 Stackoverflow 的帮助下,我可以添加相同的字符,但不是随机的。
var code = "1234567890"
func randomAlphanumeric() -> String {
let alphanumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return String((0..<1).map{ _ in alphanumeric.randomElement()! })
}
func encrypt(_ code: String, by separator: String = randomAlphanumeric(), stride: Int = 3) -> String {
return code.enumerated().map { $0.isMultiple(of: stride) && ($0 != 0) ? "\(separator)\($1)" : String($1) }.joined()
}
encrypt(code)
任何人都可以帮助我如何每 4 次调用 randomAlphanumeric() ?
结果应该是这样的:
let encryptedCode = "123A456z789i0"
解决方案
var code = "1234567890"
func randomAlphanumeric() -> String {
let alphanumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return String(alphanumeric.randomElement()!)
}
func encrypt(_ code: String, stride: Int = 3) -> String {
// Array so we can insert new elements to it.
// When we are done we can rejoin everything together
var codeArray = code.map { String($0) }
// The count of extra strings that will be added to the code.
let extraStringsCount = code.count / stride
// Add the extra strings to the array
(0..<extraStringsCount).forEach { index in
let indexToBeAddedTo = (stride + 1) * (index + 1) - 1
let randomString = randomAlphanumeric()
codeArray.insert(randomString, at: indexToBeAddedTo)
}
// rejoin the array and return
return codeArray.joined()
}
encrypt(code)
// Prints something like "123J456Y789z0" which is what you want.
推荐阅读
- image - 如何让我的不和谐机器人发送随机模因/图片
- javascript - 使用对象数组时更新状态时,subjects.map 不是函数错误
- oracle - 在 Oracle 的单行中按唯一 ID 对多列数据进行分组
- webrtc - 不附加到 html 元素的 WebRTC 音频流
- google-sheets - 如何在 =OR() 语句中简化这样的语句?
- c - 在自定义地址启动/执行具有初始堆栈的进程
- php - Laravel 注册后无法登录用户
- python - 如何在python中使用霍夫变换检测抛物线
- wordpress - 想要在古腾堡全宽上制作特定部分
- python - Pandas:我如何分组,但前提是数据满足该组中的特定条件。即*仅当*该组中有负值