Преобразовать массив словаря в массив словаря - PullRequest
0 голосов
/ 18 февраля 2020

Существуют ли возможные способы преобразования следующей структуры в заданную структуру

Ввод: -

var dic : [String:Array<Int>] = [
    "array1": [1,1,1],
    "array2": [2,2,2],
    "array3": [3,3,3]
]

Ожидаемый результат: -

var result = [
    [
        "array1" : 1,
        "array2" : 2,
        "array3" : 3
    ],[
        "array1" : 1,
        "array2" : 2,
        "array3" : 3
    ],[
        "array1" : 1,
        "array2" : 2,
        "array3" : 3
    ]
]

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

Вот двухэтапное решение, сначала создайте пустую структуру коллекции, а затем заполните ее значениями

var converted: [[String: Int]] = []

for _ in 0..<dic.count {
    converted.append([:])
}

for (key, value) in dic {    
    for (index, number) in value.enumerated() {
        converted[index][key] = number
    }
}
0 голосов
/ 18 февраля 2020

Один вкладыш:

var dic : [String:Array<Int>] = [
    "array1": [1,1,1],
    "array2": [2,2,2],
    "array3": [3,3,3]
]

let result = dic.values.first!.indices.map {index in dic.mapValues {$0[index]} }
print(result)
//->[["array3": 3, "array2": 2, "array1": 1], ["array3": 3, "array2": 2, "array1": 1], ["array3": 3, "array2": 2, "array1": 1]]

При условии:

  • все значения в dic имеют одинаковый размер
  • dic имеет по крайней мере один запись
0 голосов
/ 18 февраля 2020

попробуйте эту логику c Я надеюсь, что это сработает ...:)

var dic : [String:Array<Int>] = [
    "array1": [1,1,1],
    "array2": [2,2,2],
    "array3": [3,3,3]
]

var finalresult = Array<Any>()
var keys = Array(dic.keys)


for i in 0...dic["array1"]!.count-1{
   var arr2 = Array<Any>()
    for j in 0...keys.count-1{
        var arr1 = [String:Int]()

        arr1[keys[j]] = dic[keys[j]]![j]
        print(arr1)
        arr2.append(arr1)
    }
    print(arr2)
    finalresult.append(arr2)
}
print(finalresult)

окончательный результат - ваш вывод. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...