Как объединить несколько отдельных результатов JSON из цикла, а затем вернуть Swift

Существует метод data.table для внутреннего соединения, который очень эффективен для времени и памяти (и необходим для некоторых более крупных data.frames):

library(data.table)

dt1 <- data.table(df1, key = "CustomerId") 
dt2 <- data.table(df2, key = "CustomerId")

joined.dt1.dt.2 <- dt1[dt2]

merge также работает с данными .tables (поскольку он является общим и вызывает merge.data.table)

merge(dt1, dt2)

data.table, зарегистрированный в stackoverflow: Как выполнить операцию слияния данных.table Перевод SQL присоединяется к внешним ключам к синтаксису R data.table . Эффективные альтернативы слиянию для больших данных. Кадры R Как сделать базовое левое внешнее соединение с data.table в R?

Еще одна опция - функция join, найденная в пакете plyr

library(plyr)

join(df1, df2,
     type = "inner")

#   CustomerId Product   State
# 1          2 Toaster Alabama
# 2          4   Radio Alabama
# 3          6   Radio    Ohio

Опции для type: inner, left, right, full.

Из ?join: В отличие от merge, [join] сохраняет порядок x независимо от того, какой тип соединения используется.

1
задан James B 24 March 2019 в 03:35
поделиться

1 ответ

Для начала я бы поставил точку останова и посмотрел, как выглядит ваш объект ответа с любой конечной точки, на которую вы попали. Возможно, это действительно первые три элемента массива?

Переходя к конкретному вопросу, я бы использовал протокол Codable для расшифровки вашего ответа. Я пропущу часть Alamofire и сосредоточусь исключительно на расшифровке объекта. Используя ваш пример, вот как будет выглядеть структура:

struct ResponseObject: Codable {
    let name: String
    let location: String
}

Я бы не использовал оператор взрыва (!) в вашем коде, так как вы сгенерируете исключение, если скажете компилятору, что это 100% гарантированных денег в банке объект не ноль и это на самом деле. Вместо этого разверните дополнительные.

Вам понадобится место для ваших декодированных данных, чтобы вы могли объявить пустой массив ответов следующим образом:

var arrayOfObjects: [ResponseObject] = []

Затем вы просто объявите декодер и расшифруете свои данные. :

let decoder = JSONDecoder()

do {
    if let data = rawData {
        arrayOfObjects = try decoder.decode([ResponseObject].self, from: data)
        print("number of objects:", arrayOfObjects.count)
        let slice = arrayOfObjects.prefix(3)
        arrayOfObjects = Array(slice)
        print("number of objects after slicing the array:", arrayOfObjects.count)
    }
} catch {
    print(error)
}

Вместо циклического перемещения по массиву, просто возьмите первые три элемента массива с помощью .prefix(3). Поигравшись с этим только сейчас, я попытался добавить к первым 10 элементам массива префикс с 4, и он не сгенерировал исключение, поэтому я думаю, что это должно сработать без предварительной проверки счетчика массива.

Я бы посоветовал взглянуть на документацию Swift онлайн по адресу: Arrays, или вы можете получить довольно симпатичное приложение для Mac OS под названием Dash, которое позволяет вам загружать наборы документов для нескольких языков на вашем компьютере локально.

Удачи!

0
ответ дан Adrian 24 March 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: