2016-11-08 134 views
-1

想知道是否有人可以提供解决方案来排序罗马数字(字符串类型)I到X.当我使用{$ 0我得到I,II,III,IV,IX,V,VI,VII,VIII X. “。swift 3字母数字排序重新:I,II,III,IV,IX,V,

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

回答

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 
+0

聪明的想法。但是,关键是:第一条,第二条,第三条等。 –

+1

@ P.Festus所以先解析出来 – Alexander

+0

通过解析,你的意思是把字符串的第一部分分开:“Article”? –

0

我想出了一个简单的解决方案。我没有用字典的关键字来按照所需的数字顺序填充表视图的行,而是创建了一个简单的数组,它是有序的。当选中一行时,我可以使用didSelectRow来标识indexPath和数组的相关字符串 - 例如第1行=“第I条”。然后,我可以将选定的字符串值“Article I”作为变量用于选择嵌套字典中的相同密钥[字符串:[String:[String]]]。

PS - Lucas发布的解决方案似乎是可以在GitHub上找到的函数的部分复制和粘贴。看来卢卡斯无意中无法复制和粘贴整个功能。