Array of Dictionary


#1

Всем привет! Есть непростая(на первый взгляд) задача - собрать вот такой массив словарей

var needToGet =    [
     ["112": 
      ["112-children":
        ["127": 
         ["127-children": 
           ["128": 
            ["128": 128 ]]]]]]]

собираться должен из массива

arr = ["112", "127", "128"]
но число параметров(кол-во элементов в arr) может меняться и тогда needToGet должен расти еще больше. Поделитесь идеями как такое можно сделать

пока придумал только такое

`var arr = ["112", "127", "128"]

var category: [String : Any] = [:]

arr.forEach { (a) in
    
    var newDict: [String:Any] = [:]
    newDict[a] = a
    category.updateValue(newDict, forKey: a)
    arr.removeFirst()

}
print(category)`

[“128”: [“128”: “128”], “112”: [“112”: “112”], “127”: [“127”: “127”]]


#2
func makeDict(iter: inout IndexingIterator<[String]>) -> [String: Any]? {
    guard let str = iter.next() else { return nil }
    switch makeDict(iter: &iter) {
    case let .some(dict):
        return [str: [str+"-children": dict]]
    case .none:
        return [str: [str: Int(str) ?? 0]]
    }
}

let arr = ["112", "127", "128"]
var iter = arr.makeIterator()

print([makeDict(iter: &iter)!])

#3

великолепно работает))) а можете немного пояснить?


#4

Что тут пояснять? Работал мастер! :slight_smile:


#5

с этим никто не спорит, но некоторые тоже хотят когда то такими стать


#6

Да я понимаю, шучу! Посмотрите темы сквозных параметров, затем рекурсии ну и итераторы коллекций. Думаю, как с этими темами разберетесь, то и код без проблем сможете прочитать.


#7

значит буду смотреть эти темы