2016-07-19 4 views
1

У меня есть простая функция, которая компилирует словарь из двух других в соответствии с последним. Компилятор не обнаруживает ошибок, но после выполнения resultDict пуст. В отладочном режиме все vars counter, type.1 и tempDict имеют правильные значения не-ноль.Заполняющий словарь в Swift

func compileBaseFromCSV(original: [Int:[String]], headers: [Int:String]) -> [Int:[String:[String]]] { 
    var resultDict = [Int:[String:[String]]]() 
    var tempDict = [String]() 
    var counter = 0 
    for type in headers { 
     for object in original { 
      tempDict.append(object.1[type.0]) 
     } 
     resultDict[counter]?[type.1] = tempDict 
     counter += 1 
    } 
    print(resultDict) 
    return resultDict 
} 

Что не так с этим кодом? Благодаря!

+0

Не злоупотребляйте перечислителем массива для словарей (хотя он работает, потому что словарь представлен кортежем). Рекомендуемый перечислитель: 'for (key, value) в словаре {}' – vadian

ответ

0

С одной стороны, вы никогда не ставили resultDict[counter], вам нужно что-то вроде:

if resultDict[counter] == nil { 
    resultDict[counter] = [:] 
} 

перед нажатием значения в него.

Но, похоже, в вашем коде есть еще несколько проблем (например, если tempDict будет сброшен?). Используйте отладчик, чтобы выполнить свой код, посмотреть на значения и проверить, как они меняются (и соответствует ли это вашему желанию).

Смежные вопросы