很想知道是否有人可以提供解决罗马数字(字符串类型)I到X的排序。当我使用{$ 0.compare($ 1,选项:.numeric)== .orderedAscending}对数组进行排序时,我得到了I,II,III,IV,IX,V,VI,VII,VIII X.正如您所看到的,IX跟随IV,因为" I。"
顺便说一下,数据模型是字典[字符串:[字符串:[字符串]]]粗体表示字典中要排序的数据存在的位置。
答案 0 :(得分:1)
let romanValues = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
let arabicValues = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
var romanValue = ""
var startingValue = number
for (index, romanChar) in enumerate(romanValues) {
var arabicValue = arabicValues[index]
var div = startingValue / arabicValue
if (div > 0)
{
for j in 0..<div
{
//println("Should add \(romanChar) to string")
romanValue += romanChar
}
startingValue -= arabicValue * div
}
}
return romanValue
答案 1 :(得分:0)
我提出了一个简单的解决方案。我没有麻烦地使用字典的键来以所需的数字顺序填充表视图的行,而是创建了一个简单的数组 - 它是有序的。当选择一行时,我可以使用didSelectRow来标识indexPath和数组的相关字符串 - 例如,第1行=“Article I”。然后,我可以将选定的字符串值“Article I”作为变量传递,以用于在嵌套字典中选择相同的键[ String :[String:[String]]]。
PS - Lucas发布的解决方案似乎是可以在GitHub上找到的函数的部分复制和粘贴。看来卢卡斯无意中无法复制并粘贴整个功能。