Bri*_*tta 3 nsnumber swift swift-extensions
我正在寻找Integer
Swift 并将其转换为罗马数字String
。有任何想法吗?
人们可以在 上编写一个扩展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 提供了一些关于改进代码的建议。