2015-03-14 2 views
1

Мой вопрос очень прост, и я думаю, что это легко сделать, но как добавить объект в массив, когда массив хранится в словаре на языке Swift?Массив в словаре в Swift

var dictionary = [String: [String]]() 
for course in self.category.m_course_array 
{ 
    let firstChar = String(Array(course.getTitle())[0]).uppercaseString 
    dictionary[firstChar] = // How to add an element into the array of String 
} 

ответ

1

Не так легко, как вы могли бы подумать, на самом деле. Это немного грязно, потому что вам нужно справиться с тем, что, когда ключ отсутствует, вам нужно инициализировать массив. Вот один из способов сделать это (код изменен, чтобы быть похожими, но автономные):

var dictionary = [String: [String]]() 
let courses = ["Thing","Other Thing","Third Thing"] 

for course in courses { 
    // note, using `first` with `if…let` avoids a crash in case 
    // you ever have an empty course title 
    if let firstChar = first(course).map({String($0).uppercaseString}) { 
     // get out the current values 
     let current = dictionary[firstChar] 
     // if there were none, replace nil with an empty array, 
     // then append the new entry and reassign 
     dictionary[firstChar] = (current ?? []) + [course] 
    } 
} 

В качестве альтернативы, если вы хотите использовать .append вы могли бы сделать это:

// even though .append returns no value i.e. Void, this will 
    // return Optional(Void), so can be checked for nil in case 
    // where there was no key present so no append took place 
    if dictionary[firstChar]?.append(course) == nil { 
     // in which case you can insert a single entry 
     dictionary[firstChar] = [course] 
    } 
0

Попробуйте

dictionary[firstChar].append(yourElement) 

С dictionary[firstChar] вы должны получить ваш массив

+0

Есть две проблемы с этим , 1) поиск словарного ключа возвращает необязательный, поэтому вы не можете вызвать append на результат, вам нужно сначала развернуть опцию с помощью цепочки или карты или аналогичного, и 2) необходимо инициализировать массив, прежде чем вы сможете добавить к нему –

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