-1

我从 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。提前致谢。

4

1 回答 1

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])]
于 2017-09-11T17:12:43.487 回答