swift 3字母数字排序:I,II,III,IV,IX,V,

时间:2016-11-08 01:04:36

标签: swift sorting dictionary

很想知道是否有人可以提供解决罗马数字(字符串类型)I到X的排序。当我使用{$ 0.compare($ 1,选项:.numeric)== .orderedAscending}对数组进行排序时,我得到了I,II,III,IV,IX,V,VI,VII,VIII X.正如您所看到的,IX跟随IV,因为" I。"

顺便说一下,数据模型是字典[字符串:[字符串:[字符串]]]粗体表示字典中要排序的数据存在的位置。

2 个答案:

答案 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上找到的函数的部分复制和粘贴。看来卢卡斯无意中无法复制并粘贴整个功能。