鸿沟数组大小不同

问题描述:

我得到一组数据,从HTML刮痧与此类似:鸿沟数组大小不同

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

什么是'resultArray'的类型?为什么你最终会让自己最终得到这样的东西呢?你应该已经形成了最终的结果_而你正在scraping_。 – matt

+0

另外你不能动态地决定你什么时候需要一个新的变量,所以你提出的结果是荒谬的。如果数组恰好包含三个字符串,则可以有一个数组数组,但不完全是三个_variables_。 – matt

+0

问题是,我不知道HTML很多,我需要逐行拖拽HTML表格,但Swift中没有示例。 – Albifer

我认为你的整个规范是愚蠢的。正如你所建议的那样,你当然不会得到一系列变量。最后还有另一个字符串和数字的混合阵列完全适得其反。你应该重新考虑你的目标(如果可能的话,你应该重写你的scraping代码,以免最终混合数组结束)。

反正给定的输入,这里是如何与元组数组结束:

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])] 
+0

它可能更有效率,尤其是,在Swift 4中,但至少我在这里的方法很简单明了。 – matt