[英]ObjC to Swift array loop , need help please
我在ObjC中有以下循環:myArray是2D數組。
for (NSArray *newArray in myArray) {
for (int i = 0; i < newArray.count; i++) {
NSArray *points = [newArray[i] componentsSeparatedByString:@","];
}
}...
我正在嘗試使用Swift做同樣的事情,但是正在努力尋找一種方法來獲取componentsSeperatedByString:
for newArray in myArray {
for i in 0..<newArray.count {
var pnts:NSArray = newArray[i].componentsSeparatedByString(",")
}
}
第一步是將您的NSArray
轉換為正確的類型,在這種情況下,它看起來像您想要的:
if let array = myArray as? [[String]] {
}
然后,您有許多選擇,其中最有效的可能是嵌套迭代:
let myArray = NSArray(arrayLiteral:
NSArray(arrayLiteral: "150.10,310.20"),
NSArray(arrayLiteral: "400.10,310.20", "100,200")
)
if let source = myArray as? [[String]] {
for array in source {
for element in array {
print(element.componentsSeparatedByString(","))
}
}
}
// -> ["150.10", "310.20"]
// ["400.10", "310.20"]
// ["100", "200"]
如果您只想提取點,則可以使用map:
if let source = myArray as? [[String]] {
print(source.map {
$0.map { $0.componentsSeparatedByString(",") }
}
)
}
// -> [[["150.10", "310.20"]], [["400.10", "310.20"], ["100", "200"]]]
如果要將點折疊到單個數組中,可以使用Helium指出的flatMap,它將把數組變成一個簡單的數組:
if let source = myArray as? [[String]] {
print(source.flatMap {
$0.map { $0.componentsSeparatedByString(",") }
}
)
}
// -> [["150.10", "310.20"], ["400.10", "310.20"], ["100", "200"]]
當然,您還可以使用另一個映射調用將其提取為[[Double]]而不是[[String]]:
if let source = myArray as? [[String]] {
print(source.map {
$0.map { $0.componentsSeparatedByString(",").map { Double($0)! } }
})
}
// -> [[150.1, 310.2], [400.1, 310.2], [100.0, 200.0]]
如果需要pnt,則可以使用flatmap,它會將2D數組平整為帶有點的單個數組。
let pnts = myArray.flatMap { array in
array.map { object in
object.componentsSeparatedByString(",")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.