首页 > 解决方案 > 有多个单独的数据数组,还有其他更有效的方法可以将它们合并到对象中吗?

问题描述

我正在尝试填充下载的 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 对象数组中的另一种方法(在这种情况下)?

标签: arraysswiftobjectiteration

解决方案


无论您做什么,您仍然必须遍历多个数组,因为您必须获取每个项目。由于问题的性质,我怀疑您能否找到 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) 相对较快


推荐阅读