#swift #xcode #dictionary
#swift #xcode #словарь
Вопрос:
Новичок в разработке программного обеспечения, я работаю над книгой Big Nerd Ranch «Swift Programming». Одна из задач, поставленных в книге, состоит в том, чтобы напечатать массив в словаре, который содержит 15 почтовых индексов, и разделить их на три строки группами по пять. Форматирование должно точно соответствовать тому, как оно отображается в книге.
Я попытался решить проблему, используя информацию, изложенную в книге, с помощью документации разработчика.
Нет кубиков.
Это то, что мне нужно распечатать:
Caterham has the following zip codes: [111, 111, 111, 111, 111,
222, 222, 222, 222, 222,
333, 333, 333, 333, 333]
Однако это самое близкое, что я могу получить…
var areaCodes = ["Caterham": [111, 111, 111, 111, 111], "Coulsdon": [222, 222, 222, 222, 222], "Purley": [333, 333, 333, 333, 333]]
var caterhamCodes : [Int] = []
for (_, values) in areaCodes {
caterhamCodes = values
}
print("Caterham has the following codes: (caterhamCodes[0...4]),")
print(" (caterhamCodes[5...9]),")
print(" (caterhamCodes[10...14]).")
который печатает:
Caterham has the following postcodes: [111, 111, 111, 111, 111],
[222, 222, 222, 222, 222],
[333, 333, 333, 333, 333].
По сути, мне нужно то, что у меня есть выше, за вычетом некоторых квадратных скобок и без знаков препинания после каждого раза, когда печатается блок почтовых индексов. В книге указано, что мне может потребоваться использовать параметр с именем terminator. В нем также упоминается, что мне, возможно, потребуется узнать, как представлять специальные символы в строковых литералах.
Я ценю, что это, вероятно, вопрос высокого уровня с простым ответом, но я всего несколько недель изучаю, поэтому я надеюсь, что меня можно простить за то, что я задаю хотя бы несколько глупых вопросов!
Комментарии:
1. Не
[222, 222, 222, 222, 222]
связаны с"Coulsdon"
?2. Возможно, если вы перечитаете Silver Challenge , то потребуется форматирование всех значений в словаре, чтобы он не переполнялся…
Ответ №1:
Добро пожаловать в сообщество разработчиков и приятного пребывания! Я пытаюсь ответить как можно проще, поэтому вот моя попытка:
var areaCodes = ["Caterham": [111, 111, 111, 111, 111],
"Coulsdon": [222, 222, 222, 222, 222],
"Purley": [333, 333, 333, 333, 333]]
let codesArray = areaCodes.values.sorted(by: { $0[0] < $1[0] })
let caterhamString = "Caterham has the following zip codes: ["
var printString = caterhamString
for (index, area) in codesArray.enumerated() {
for code in area {
printString = "(code), "
}
if index != codesArray.count - 1 {
printString = "n" String(repeating: " ", count: caterhamString.count)
}
}
print(printString.dropLast(2).appending("]"))
Надеюсь, это поможет! Удачи!
Ответ №2:
Вот способ получения желаемого результата :
let intro = "Caterham has the following zip codes: ["
let spaces = ",n" String(repeating: " ", count: intro.count)
let areaCodes = ["Caterham": [111, 111, 111, 111, 111], "Coulsdon": [222, 222, 222, 222, 222], "Purley": [333, 333, 333, 333, 333]]
let codes = areaCodes.values.sorted { $0[0] < $1[0] }
var output = intro
codes.map { $0.map{ String($0) }.joined(separator: ", ") }
.joined(separator: spaces)
"]"
print(output)
Который печатает
Caterham has the following zip codes: [111, 111, 111, 111, 111, 222, 222, 222, 222, 222, 333, 333, 333, 333, 333]