我在ObjC中有以下循环:myArray是一个2D数组。
for newArray in myArray {
for i in 0..<newArray.count {
var pnts:NSArray = newArray[i].componentsSeparatedByString(",")
}
}
我正在尝试使用 Swift 做同样的事情,但我很难找到获取componentsSeperatedByString的方法:
{{1}}
答案 0 :(得分:2)
第一步是将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]]
答案 1 :(得分:0)
如果你想要pnts,你可以使用flatmap,它会将2D数组展平为带有点的单个数组。
let pnts = myArray.flatMap { array in
array.map { object in
object.componentsSeparatedByString(",")
}
}