首页 > 解决方案 > 快速添加随机字母数字字符串的每个第 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"

标签: swift

解决方案


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.

推荐阅读