arrays - 有多个单独的数据数组,还有其他更有效的方法可以将它们合并到对象中吗?
问题描述
我正在尝试填充下载的 Json 并将它们填充到对象数组中。但是,数据的结构存在一些复杂性,我如何能够有效地将这些数组填充到对象中?
以下是从 Web 服务下载的 Json Data 的基本结构:
{
timestamp: [Date],
openingStockPrice: [Double],
closingStockPrice: [Double]
}
例如
{
timestamp: [2019-01-01, 2019-01-02, 2019-01-03....],
openingStockPrice: [100.0, 101.0, 95.0, ...],
closingStockPrice: [101.0, 95.0, 99.5, ...]
}
根据数据结构,有三个独立的数组,数据类型为日期和双精度。
因此,每个数组的第一项属于该特定日期的股票定价。每个数组的第二项属于第二天......等等。
目前,我设法遍历每个数组并根据以下结构将数据填充到对象中。
Struct StockPrice {
timestamp: Date,
openingStockPrice: Double,
closingStockPrice: Double
}
var stockPrice: [StockPrice]
我设法通过分别循环遍历每个数组来将数据组织到 StockPrice 对象数组中。但是,随着数据集变大,遍历每个数组似乎根本没有效率。
是否有人可能知道将多个数组填充到一个 StockPrice 对象数组中的另一种方法(在这种情况下)?
解决方案
无论您做什么,您仍然必须遍历多个数组,因为您必须获取每个项目。由于问题的性质,我怀疑您能否找到 O(logN) 解决方案。最好的是 O(n)
O(n) 解决方案:
var stockPrices = [StockPrice]()
//assuming timeStamps, openingStockPrices, closingStockPrices have the same number of elements
for i in 0 ..< timeStamps.count {
let timeStamp = timeStamps[i]
let openingStockPrice = openingStockPrice[i]
let closingStockPrice = closingStockPrice[i]
let stockPrice = StockPrice(timeStamp, openingStockPrice, closingStockPrice)
stockPrices(add: stockPrice)
}
tbf,一个 O(n) 相对较快