簡體   English   中英

ObjC到Swift數組循環,請幫助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM