gpt4 book ai didi

objective-c - ObjC 到 Swift 数组循环,需要帮助

转载 作者:行者123 更新时间:2023-11-28 13:02:24 24 4
gpt4 key购买 nike

我在 ObjC 中有以下循环:myArray 是一个二维数组。

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"]]]

如果你想将点折叠成一个数组,你可以使用 flatMap,正如 Helium 所指出的那样,它将把数组的数组变成一个简单的数组:

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]]

关于objective-c - ObjC 到 Swift 数组循环,需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com