您好,我對swift比較陌生。我想要構建一個數組,其中包含來自下面顯示的字符串的元組數組。每個數組中元組的數量並不總是恆定的。最終的數據結構將是: [[(雙,雙)]]座標字符串解析
要解析的字符串: 「((2363448.9 5860581.3,2363438.0 5860577.9),(2363357.5 5860494.7,2363303.2 5860502.0,2363282.5 5860502.5),(2363357.5 5860494.7),(.........等))「
我想知道如果有人有任何想法,最好/最有效的方式做到這一點。我正在考慮迭代原始字符串並根據遇到的字符設置標誌。然後爲東和北建立字符串。但我不確定這是否是最好的方式,看起來過於複雜。 效率是一個因素,因爲字符串有時可能相當大。
--UPDATE 這是我到目前爲止的代碼,這似乎工作。有關改進或更好的方法的想法,讚賞,因爲代碼有點混亂。感謝迄今爲止幫助過的所有人。
typealias Coordinate = (easting: Double, northing: Double)
typealias Coordinates = [[Coordinate]]
var array = Array<Array<Coordinate>>() //Array of array of tuples(Double)
var tupleArray = [Coordinate]() //Array of tuples(Double)
var tuple: (Double, Double)! = (0, 0)
var easting: Bool = false
var northing: Bool = false
var eastingString: String = ""
var northingString: String = ""
var openBracket = 0
let tempString = getSubstringFromIndex(wktGeometry , character: "G") //string to parse
for char in tempString.characters {
if char == "(" {
openBracket++
if openBracket == 2 {
easting = true
}
} else if char == ")" {
openBracket--
if openBracket == 1 {
tuple.1 = Double(northingString)!
tupleArray.append(tuple)
array.append(tupleArray)
tupleArray = [Coordinate]()
eastingString = ""
northingString = ""
}
} else if char == "," {
if openBracket == 2 {
tuple.1 = Double(northingString)!
tupleArray.append(tuple)
eastingString = ""
northingString = ""
}
} else if char == " " {
if easting == true {
tuple.0 = Double(eastingString)!
easting = false
northing = true
} else {
northing = false
easting = true
}
} else {
if easting {
eastingString += String(char)
} else if northing {
northingString += String(char)
}
} //end if
} //end for
print(array)
這幾乎是JSON。如果你交換了'(' - >'['和')' - >']',你可以使用內置的JSON解析代碼。 – trojanfoe
好,非常感謝,我會看看。 – ozzyzig
@trojanfoe這樣做,你將以'[[2363448.9 5860581.3,2363438.0 5860577.9],...''結尾,這將不是有效數組(缺少逗號)。 – Moritz