Все темы
Строки и коллекции
`String` и `Character`, Unicode и индексы строк, массивы, словари и множества — как Swift их хранит, читает и копирует.
Сортировка:
11 вопросов
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
3 4
Открыть задачу →Типичные ошибки
- ✗Ждать
4 4: считать, чтоvar list = startдаёт второе имя тому же массиву. Массив — значимый тип, иlist— отдельная копия. - ✗Ждать ошибки компиляции: считать, что копия массива из
letостаётся константой. Копия подчиняется своему объявлению, аlist— этоvar.
Уточняющие вопросы
- →Когда Swift на самом деле копирует элементы
start? - →Как функции добавить элемент в массив вызывающего кода?
JuniorТеорияЧастоЧто произойдёт при компиляции и запуске программы?
JuniorТеорияЧасто
Что произойдёт при компиляции и запуске программы?
Аварийно завершится
Открыть задачу →Типичные ошибки
- ✗Ждать
30: приниматьcountза индекс последнего элемента. Индексы начинаются с нуля, последний —count - 1, а индексcountаварийно завершает программу. - ✗Ждать
nil: чтение по индексу даёт обычныйInt, а не опционал, какfirstиlast. Несуществующий индекс останавливает программу с сообщениемIndex out of range.
Уточняющие вопросы
- →Как прочитать последний элемент
prices, не выходя за границы массива? - →Что выведет
prices.last ?? 0и почему это выражение не завершает программу аварийно?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
2 4
Открыть задачу →Типичные ошибки
- ✗Ждать
1 4: читатьdefault: 0как «обнулить счётчик». Запасное значение нужно, только пока ключа нет; дальше+= 1прибавляет к сохранённому счётчику. - ✗Ждать
2 6: приниматьcountза число добавленных слов. Словарь считает пары, а повторное слово меняет свою пару, а не добавляет новую.
Уточняющие вопросы
- →Что вернёт здесь
counts["is", default: 0]и изменится ли после этогоcounts.count? - →Почему
counts[word] += 1безdefault:не компилируется?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
3 0 -1
Открыть задачу →Типичные ошибки
- ✗Ждать аварийного завершения, как при индексе за концом массива. Поиск отсутствующего ключа в словаре даёт
nil, и??заменяет его на-1. - ✗Ждать
-1для"pears": считать сохранённый0пустым значением.??заменяет толькоnil, а ключ"pears"в словаре есть.
Уточняющие вопросы
- →Как проверить, есть ли ключ
"pears"в словаре вообще? - →Что даст
stock["plums", default: -1]и добавит ли это ключ?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
2 3
Открыть задачу →Типичные ошибки
- ✗Ждать
3 3: считать номера элементов с1.enumerated()начинает с0, поэтому последний номер в массиве из трёх элементов —2. - ✗Ждать
4 3: считать, что в кортеже сначала элемент, а потом номер. Первым идёт номер, поэтомуiполучает0,1и2.
Уточняющие вопросы
- →Что выведет программа, если цикл будет
for (_, x) in scores.enumerated()сposition = x? - →Как напечатать каждый элемент вместе с его местом, считая с 1?
JuniorТеорияЧастоЧто произойдёт при компиляции и запуске программы?
JuniorТеорияЧасто
Что произойдёт при компиляции и запуске программы?
Не скомпилируется
Открыть задачу →Типичные ошибки
- ✗Ждать
[1, 2, 3, 4]: считать, чтоletфиксирует только имя. В Swift массив черезlet— константа целиком, поэтомуappendне компилируется. - ✗Ждать аварийного завершения на строке с
append: Swift проверяет изменения констант при компиляции, до выполнения первой строки.
Уточняющие вопросы
- →Что выведет программа, если объявить
numbersчерезvar? - →Что из
numbers + [4]иnumbers.append(4)работает с массивом черезletи почему?
JuniorТеорияЧастоПочему contains у Set не проверяет элементы по очереди?
JuniorТеорияЧасто
Почему contains у Set не проверяет элементы по очереди?
Множество вычисляет место значения по нему самому и смотрит только туда
Типичные ошибки
- ✗Считать, что
Hashableускоряет сравнение. Он даёт число, по нему множество вычисляет место значения, иcontainsсмотрит только туда. - ✗Ждать, что
Setхранит элементы по возрастанию и ищет делением пополам. Порядка у множества нет: значение ищут по месту, вычисленному из него.
Уточняющие вопросы
- →Почему ключи словаря тоже должны быть
Hashable? - →Как ищет
containsу массива и почему в длинном массиве это медленнее?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
5 4
Открыть задачу →Типичные ошибки
- ✗Ждать
5 5: считать, чтоinsertдобавляет всегда, какappend. Множество пропускает значение, которое в нём уже есть, и повторная вставка9ничего не меняет. - ✗Ждать
5 2: понимать «без повторов» как «встретилось один раз».Set(pack)оставляет каждое разное значение по разу, так что4и7тоже остаются.
Уточняющие вопросы
- →Что напечатает здесь
print(album.sorted())? - →Почему
print(album)может перечислять элементы в разном порядке при каждом запуске?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
2 red-blue
Открыть задачу →Типичные ошибки
- ✗Ждать
3 red--blue: считать, чтоsplitсохраняет пустой кусок между двумя разделителями. В Swiftsplitпо умолчанию отбрасывает пустые куски, иred,,blueдаёт две части. - ✗Ждать
2 red-blue-: считать, чтоjoinedдобавляет разделитель после каждой части. Разделитель встаёт только между частями, и после последней его нет.
Уточняющие вопросы
- →Как заставить
splitсохранить пустой кусок между двумя запятыми? - →Что выведет программа, если передать
joinedпустой разделитель""?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
6 8
Открыть задачу →Типичные ошибки
- ✗Ждать
6 6: считать, чтоéзанимает один байт, как латинская буква. В UTF-8 она занимает два байта, и двеéдобавляют кutf8.countдва лишних байта. - ✗Ждать
8 8: думать, чтоcountсчитает байты, как длина строки в некоторых языках. В Swiftcountсчитает символы, а байты считаетutf8.count.
Уточняющие вопросы
- →Что дадут
countиutf8.countдля эмодзи👍🏽и почему? - →Почему Swift проходит всю строку, чтобы узнать её
count?
JuniorТеорияЧастоЧто произойдёт при компиляции и запуске программы?
JuniorТеорияЧасто
Что произойдёт при компиляции и запуске программы?
Не скомпилируется
Открыть задачу →Типичные ошибки
- ✗Ждать
S, какs[0]даёт во многих языках. Символы в Swift занимают разное число байтов, поэтому у строки нет обращения по номеруInt, иword[0]не компилируется. - ✗Ждать аварийного завершения во время работы, как при индексе за концом строки. Здесь уже компилятор отвергает обращение по номеру
Int, и программа не запускается.
Уточняющие вопросы
- →Как достать первый символ
wordбезword[0]? - →Как достать третий символ строки через
String.Index?