我想创建一个函数,它接收一个字符串并返回一个字符串,并用字母表中的 13 个字母(ROT13)替换一个字母。我找到了很多例子,不幸的是,由于各种错误,我无法让它发挥作用。例如这个:

var key = [String:String]() // EDITED
let uppercase = Array(arrayLiteral: "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
let lowercase = Array(arrayLiteral: "abcdefghijklmnopqrstuvwxyz")
for i in 0 ..< 26 {
    key[uppercase[i]] = uppercase[(i + 13) % 26]
    key[lowercase[i]] = lowercase[(i + 13) % 26]
}

func rot13(s: String) -> String {
    return String(map(s, { key[$0] ?? $0 }))
}

最佳答案

实际上,您最初映射 Character 的方法很好:

var key = [Character: Character]()

但是这两个数组必须是 Characters 的数组:
let uppercase = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters)
let lowercase = Array("abcdefghijklmnopqrstuvwxyz".characters)

(备注:您(几乎)永远不想调用 xxxLiteral: 初始值设定项
明确地。这样做(几乎)总是隐藏实际问题。)

现在您填充字典的代码有效:
for i in 0 ..< 26 {
    key[uppercase[i]] = uppercase[(i + 13) % 26]
    key[lowercase[i]] = lowercase[(i + 13) % 26]
}

并且可以将字符串转换为
//                       map
// String --> Characters ---> Characters -> String

func rot13(s: String) -> String {
    return String(s.characters.map { key[$0] ?? $0 })
}

关于xcode - 如何在 Swift 中实现 ROT13 函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37756430/

10-11 08:46