2016-11-08 132 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上找到的函數的部分複製和粘貼。看來盧卡斯無意中無法複製和粘貼整個功能。