我从HTML Scraping获得了一系列类似于此的数据:
var resultArray = ["Maths", 2, 7, 8, "Grammar", 1, "Science", 7, 8]
我想要做的是在找到“字符串”值时将其除去。 结果应如下所示:
var new_arr1 = ["Maths", 2, 7, 8]
var new_arr2 = ["Grammar", 1]
var new_arr2 = ["Science", 7, 8]
问题在于,如果我使用这样的东西:
func chunk(_ chunkSize: Int) -> [[Element]] {
return stride(from: 0, to: self.count, by: chunkSize).map({ (startIndex) -> [Element] in
let endIndex = (startIndex.advanced(by: chunkSize) > self.count) ? self.count-startIndex : chunkSize
return Array(self[startIndex..<startIndex.advanced(by: endIndex)])
})
}
我只能有一个固定的“newArray”大小。
使用Xcode8和Swift3。提前致谢。
答案 0 :(得分:2)
我认为你的整个规范很愚蠢。你建议,你当然不能得到一系列变量。并最终得到另一个混合的字符串和数字阵列完全适得其反。您应该重新考虑您的目标(如果可能,您应该重写您的抓取代码,以便最终不会以混合数组结束。)
无论如何,根据输入,这里是如何最终得到一个元组数组:
let resultArray : [Any] = ["Maths", 2, 7, 8, "Grammar", 1, "Science", 7, 8]
let nums = resultArray.split{$0 is String}
let strings = resultArray.filter{$0 is String}
let result = Array(zip(strings, nums)).map{($0, Array($1))}
print(result) // [("Maths", [2, 7, 8]), ("Grammar", [1]), ("Science", [7, 8])]