【问题标题】:Divide array in chunks with different sizes将数组分成不同大小的块
【发布时间】:2017-09-11 16:59:00
【问题描述】:

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

【问题讨论】:

  • resultArray的类型是什么?你为什么一开始就让自己得到这样的结果?您应该在在抓取时形成最终结果。
  • 问题是我对HTML不太了解,需要逐行抓取一个HTML Table,但是Swift中没有例子。
  • "问题是我对 HTML 不太了解,需要逐行抓取 HTML 表格,但 Swift 中没有示例" 您没有任何“示例”永远想做。你的工作是学习你需要知道的东西,然后做一些编程。如果你正确地编写了你的​​爬取代码,你以后就不需要划分任何东西了。

标签: arrays swift chunks stride


【解决方案1】:

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

不管怎样,给定输入,下面是如何得到一个元组数组:

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

【讨论】:

  • 有可能更高效,尤其是。在 Swift 4 中,但至少我的方法是简单明了的。
猜你喜欢
  • 2020-09-16
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 2012-07-12
  • 1970-01-01
  • 2020-05-06
  • 2020-01-14
相关资源
最近更新 更多