在 Swift 中将整数转换为罗马数字字符串

Bri*_*tta 3 nsnumber swift swift-extensions

我正在寻找IntegerSwift 并将其转换为罗马数字String。有任何想法吗?

Bri*_*tta 7

人们可以在 上编写一个扩展Int,类似于下面看到的。

请注意:对于小于 1 的数字,此代码将返回“”。虽然这对于罗马数字来说可能没问题(零不存在),但您可能希望在自己的实现中以不同的方式处理这个问题。

extension Int {
    var romanNumeral: String {
        var integerValue = self
        // Roman numerals cannot be represented in integers greater than 3999
        if self >= 4000 {
            return "Invalid input (greater than 3999)"
        } 
        var numeralString = ""
        let mappingList: [(Int, String)] = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")]
        for i in mappingList {
            while (integerValue >= i.0) {
                integerValue -= i.0
                numeralString += i.1
            }
        }
        return numeralString
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢 Kenneth Bruno 提供了一些关于改进代码的建议。