【问题标题】:Beginner Swift: Converting string if letter in dictionary初学者 Swift:如果字典中的字母转换字符串
【发布时间】:2017-09-27 10:09:15
【问题描述】:

感谢您的帮助 - 刚开始,所以想象一下我的逻辑存在一些严重问题。

尝试编写程序,给定一个输入,如果在字典中找到来自该输入的字母,则将该字母替换为相应的值。

真的卡在我要去的地方。任何人都可以帮助/建议一种可行的替代逻辑吗?

var leetDic = ["A" : "4",
               "B" : "6",
               "E" : "3",
               "I" : "1",
               "L" : "1",
               "M" : "(V)",
               "N" : "(/)",
               "O" : "0",
               "S" : "5",
               "T" : "7",
               "V" : "(/",
               "W" : "`//]"]


func leetConverter(leet: String) {

    var leet1 = leet.uppercased()

    for i in leet1.characters { 

        if i == leetDic.keys { //ERROR "Binary operator cannot be applied to operands of type Character and dictionary"

            i = leetDic.values // ERROR "cannot assign value 'i' is a let constant"
        } else {

            return i
        }
    }


}

var test = leetConverter(leet: "Hello World")

【问题讨论】:

    标签: swift string function dictionary


    【解决方案1】:

    问题是您正在比较字符和数组,您也可以在循环中为 i 赋值,因为它是常量,您可以这样进行。

    func leetConverter(leet: String) -> String {
        var leet1 = leet.uppercased()
        var newString = String()
        for ch in leet1.characters {
            let str = String(ch)
            if let value = leetDic[str] {
                newString.append(value)
            } else {
                newString.append(str)
            }
        }
        return newString
    }
    

    更快捷的方式

    func leetConverter(leet: String) -> String {
        let str = leet.characters.map { leetDic[String($0).uppercased()] ?? String($0) }.joined()
        return str
    }
    

    【讨论】:

    • 当然,你可以在地图变换中说leetDic[String($0)] ?? String($0) ;) 虽然leetDict 可能应该是[Character: String],在这种情况下leetDic[$0] ?? String($0)
    • @Hamish 感谢您的好建议,已编辑答案。
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多