Π’ΠΈΠΏΡ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

Swift обСспСчиваСт Ρ‚Ρ€ΠΈ основных Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉΒ - это ΠœΠ°ΡΡΠΈΠ²Ρ‹, ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΈΒ Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ для хранСния ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ - это упорядочСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° - это нСупорядочСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ - это нСупорядочСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, хранящиС ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅".

17 ноября 2022

Β 

οΏΌ

Массивам, мноТСствам ΠΈ словарям в Swift всСгда понятно, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈΒ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎ ошибкС Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΈΠΏΠ°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

ЗабСгая Π²ΠΏΠ΅Ρ€Π΅Π΄, скаТСм, Ρ‡Ρ‚ΠΎ Массив, Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ ΠΈ ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π² Swift Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ коллСкциях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Π³Π»Π°Π²Π΅ "Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹".

Π˜Π·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

Когда Π²Ρ‹ создаСтС массив, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ мноТСство ΠΈ присваиваСтС Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ созданная коллСкция Π±ΡƒΠ΄Π΅Ρ‚ измСняСмой. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ послС СС создания ΠΏΡƒΡ‚Π΅ΠΌ добавлСния, удалСния, ΠΈΠ»ΠΈ измСнСния элСмСнтов этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ присвоитС массив ΠΈΠ»ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ константС, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ нСизмСняСмым, Π° Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ содСрТимоС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся созданиС нСизмСняСмых ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π²ΠΎ всСх случаях, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ. ДСлая это, ΠΌΡ‹ позволяСм компилятору Swift ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΡˆΠΈΡ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

ΠœΠ°ΡΡΠΈΠ²Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹ хранят значСния одинакового Ρ‚ΠΈΠΏΠ° Π² упорядочСнном спискС. Одно ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·, Π² Ρ€Π°Π·Π½Ρ‹Ρ… позициях.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Массив Π² Swift связан с классом FoundationΒ  NSArray. Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉΒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании Array с Foundation ΠΈ Cocoa, см. Bridging Between Array and NSArray.

Π‘ΠΎΠΊΡ€Π°Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ синтаксис массивов

Полная Ρ„ΠΎΡ€ΠΌΠ° записи массива Π² Swift ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Array<Element>, Π³Π΄Π΅ Element это Ρ‚ΠΈΠΏ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ массив.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ массив Π² сокращСнной Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠ°ΠΊ [Element].

Π₯отя Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, краткая Ρ„ΠΎΡ€ΠΌΠ° являСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ руководствС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ‚ΠΈΠΏΡƒ массива.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого массива

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой массив ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°:


var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "someInts is of type [Int] with 0 items."

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ someInts выводится ΠΊΠ°ΠΊ [Int] ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Ссли контСкст ΡƒΠΆΠ΅ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠΆΠ΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽΒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΒ ΠΈΠ»ΠΈ константу, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пустого литСрала массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся Π² Π²ΠΈΠ΄Π΅Β [] (пустой ΠΏΠ°Ρ€Ρ‹ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок):


someInts.append(3)
// массив someInts Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Int
someInts = []
// массив someInts Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пуст, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ [Int]

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива с Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

Π’ΠΈΠΏ массива Π² Swift Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для создания массива ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° со всСми Π΅Π³ΠΎ значСниями, установлСнными Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ этому инициализатору Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅Β repeating): и сколько Ρ€Π°Π· это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ повторяСтся Π² Π½ΠΎΠ²ΠΎΠΌ массивС (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ count):


var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ [Double] ΠΈ Ρ€Π°Π²Π΅Π½ [0.0, 0.0, 0.0]

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива, ΠΏΡƒΡ‚Π΅ΠΌΒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π²ΡƒΡ… массивов

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΠ²Β Π΄Π²Π°Β ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… массива с совмСстимыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ слоТСния (+). Новый Ρ‚ΠΈΠΏ массива выводится ΠΈΠ· Ρ‚ΠΈΠΏΠ° Π΄Π²ΡƒΡ… массивов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚Π΅ вмСстС:


var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ [Double] ΠΈ Ρ€Π°Π²Π΅Π½ [2.5, 2.5, 2.5]
 
var sixDoubles = threeDoubles + anotherThreeDoubles
// Ρ‚ΠΈΠΏ sixDoubles Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊ [Double] ΠΈ Ρ€Π°Π²Π΅Π½ [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива Ρ‡Π΅Ρ€Π΅Π· Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ массива

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся быстрым способом ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива.

Π›ΠΈΡ‚Π΅Ρ€Π°Π» массива ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ списка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€ΠΎΠΉ (ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ…) скобок:

[Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3]

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся массив ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ shoppingList для хранСния String Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:


var shoppingList: [String] = ["Eggs", "Milk"]
// shoppingList Π±Ρ‹Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с двумя элСмСнтами

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ shoppingList объявлСна ΠΊΠ°ΠΊ "массив ΠΈΠ· String Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΠΊΠ°ΠΊ [String]. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для этого массива ΡƒΠΊΠ°Π·Π°Π½ Ρ‚ΠΈΠΏ значСния String, Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ String значСния. Π—Π΄Π΅ΡΡŒ, массив shoppingList ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ двумя String значСниями ("Eggs" ΠΈ "Milk"), написанными Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Массив shoppingList объявлСн ΠΊΠ°ΠΊ пСрСмСнная ( с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ var ), Π° Π½Π΅ константа ( с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ let ), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² список ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π½ΠΈΠΆΠ΅.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π»ΠΈΡ‚Π΅Ρ€Π°Π» массива содСрТит Π΄Π²Π° String значСния ΠΈ большС Π½ΠΈΡ‡Π΅Π³ΠΎ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ присвоили ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ shoppingList ( массив ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ String значСния), ΠΈ поэтому присвоСниС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΊΠ°ΠΊ способ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ shoppingList двумя Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами.

Благодаря Π²Ρ‹Π²ΠΎΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠ² Swift, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ для массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива, хранящСго значСния Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. ВмСсто этого, инициализация shoppingList ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана Π² сокращСнной Ρ„ΠΎΡ€ΠΌΠ΅:


var shoppingList = ["Eggs", "Milk"]

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Swift ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти, Ρ‡Ρ‚ΠΎ [String] являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ shoppingList.

Доступ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ массива

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ массиву ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис сабскриптов.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² массивС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π³ΠΎ read-only свойство count:


print("The shopping list contains \(shoppingList.count) items.")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The shopping list contains 2 items."

ЛогичСскоС свойство isEmpty ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС быстрого способа ΡƒΠ·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ свойство count Ρ€Π°Π²Π½Ρ‹ΠΌ 0:


if shoppingList.isEmpty {
    print("The shopping list is empty.")
} else {
    print("The shopping list is not empty.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The shopping list is not empty."

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† массива Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° append:


shoppingList.append("Flour")
​// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 3 элСмСнта, Π° ΠΊΠΎΠ΅-ΠΊΡ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π±Π»ΠΈΠ½Ρ‹

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ массив с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими совмСстимыми элСмСнтами ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° слоТСния ΠΈ присвоСния (+=):


shoppingList += ["Baking Powder"]
​// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ 4 элСмСнта
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
​// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ 7 элСмСнтов

МоТно ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса сабскриптов, помСстив индСкс значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок сразу послС ΠΈΠΌΠ΅Π½ΠΈ массива.


var firstItem = shoppingList[0]
// firstItem Ρ€Π°Π²Π΅Π½ "Eggs"

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² этом массивС ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0, Π° Π½Π΅ 1. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Swift всСгда Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 0.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис сабскриптов для измСнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ индСкса:


shoppingList[0] = "Six eggs"
​// ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² спискС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π΅Π½ "Six eggs", Π° Π½Π΅ "Eggs"

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис сабскриптов для измСнСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π·Π° Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ замСняСт "Chocolate Spread", "Cheese", ΠΈ "Butter"Β Π½Π°Β "Bananas" ΠΈ "Apples":


shoppingList[4...6] = ["Bananas", "Apples"]
​// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 6 элСмСнтов

Для вставки элСмСнта ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ индСксу Π²Π½ΡƒΡ‚Ρ€ΡŒ массива, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ insert(_:at:) :


shoppingList.insert("Maple Syrup", at: 0)
​// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 7 элСмСнтов
​// "Maple Syrup" Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка

Π’Ρ‹Π·Π²Π°Π² этот insert(_:at:)Β ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΌΡ‹ вставили Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "Maple Syrup" Π² самоС Π½Π°Ρ‡Π°Π»ΠΎ списка ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² элСмСнт с индСксом 0.

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° remove(at:). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ удаляСт элСмСнт с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ индСксом ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ элСмСнт (хотя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ):


let mapleSyrup = shoppingList.remove(at: 0)
​// элСмСнт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» индСкс 0 Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½
// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 6 элСмСнтов, ΠΈ Π½Π΅Ρ‚ Maple Syrup
​// константа mapleSyrup Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ строкС "Maple Syrup"

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ† массива, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ошибка исполнСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, дСйствитСлСн Π»ΠΈ индСкс, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, сравнив Π΅Π³ΠΎ с свойством count массива. Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° count Ρ€Π°Π²Π΅Π½ 0 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ массив пуст), самый Π±ΠΎΠ»ΡŒΡˆΠΎΠΉΒ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ индСкс Π² массивС всСгда Π±ΡƒΠ΄Π΅Ρ‚ count - 1, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ массивы ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ c нуля.

Π›ΡŽΠ±Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ массива Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ³Π΄Π° удаляСтся элСмСнт, ΠΈ поэтому Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с индСксом 0 ΠΎΠΏΡΡ‚ΡŒ Ρ€Π°Π²Π½ΠΎ "Six eggs":


firstItem = shoppingList[0]
​// firstItem Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π΅Π½ "Six eggs"

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний элСмСнт ΠΈΠ· массива, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ removeLast() вмСсто remove(at:), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСобходимости запроса свойства count для массива. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ remove(at:), removeLast()Β Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт:


let​ ​apples​ = ​shoppingList​.​removeLast​()
// послСдний элСмСнт массива Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½
// shoppingList Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 5 элСмСнтов, ΠΈ Π½Π΅Ρ‚ яблок
// константа apples Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ строкС "Apples"

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ массиву

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ всСму Π½Π°Π±ΠΎΡ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for-in :


for item in shoppingList {
  print(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ цСлочислСнный индСкс ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ вмСсто этого Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ enumerated() для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву. Ѐункция enumerated()Β Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива, собрав вмСстС индСкс ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для этого элСмСнта. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ константы ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:



for (index, value) in shoppingList.enumerated() {
  print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎ Ρ†ΠΈΠΊΠ» for-in, смотритС Π³Π»Π°Π²Ρƒ Π¦ΠΈΠΊΠ»Ρ‹Β For-in.

Β 

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π°

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² нСупорядочСнной Ρ„ΠΎΡ€ΠΌΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСства ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ массиву, ΠΊΠΎΠ³Π΄Π° порядок для вас значСния Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎΒ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Вип Swift Set связан с классом Foundation NSSet.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании мноТСства с Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ Foundation ΠΈ Cocoa ΠΌΠΎΠΆΠ½ΠΎ Π² Bridging Between Set and NSSet.

Π₯эш значСния для Ρ‚ΠΈΠΏΠ° Set

Π’ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ…ΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠ³ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² мноТСствС, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для вычислСния собствСнного значСния Ρ…ΡΡˆΠ°. Π’ΠΈΠΏ значСния Ρ…ΡΡˆΠ° Int Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ провСсти сравнСниС Ρ‡Ρ‚ΠΎ Ссли a == b, Ρ‚ΠΎ ΠΈ a.hashValue == b.hashValue.

ВсС Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Swift (Int, String, Double, Bool) ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² качСствС Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ мноТСства ΠΈΠ»ΠΈ Π² качСствС Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ словаря. ЗначСния Ρ‡Π»Π΅Π½ΠΎΠ² пСрСчислСния Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ связанных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Ρ‡Ρ‚ΠΎ описано Π² Π³Π»Π°Π²Π΅ ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ) Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваш собствСнный Ρ‚ΠΈΠΏ Π² качСствС Ρ‚ΠΈΠΏΠ° значСния мноТСства ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π° словаря, подписав Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Hashable ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Swift. Π’ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подписаны ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Hashable Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ gettable свойство hashValue. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ hashValue Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Hashable подписан ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Equatable, Ρ‚ΠΎ подписанныС ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства ==. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Equatable Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ возмоТности сравнСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рСализация ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° == Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‚Ρ€Π΅ΠΌ условиям, для всСх Ρ‚Ρ€Π΅Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ a, b, c.

  1. a == a (Π Π΅Ρ„Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ)
  2. a == b, Π·Π½Π°Ρ‡ΠΈΡ‚ b == a (БиммСтрия)
  3. b == a && b == c, Π·Π½Π°Ρ‡ΠΈΡ‚ a == c (Π’Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ)

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π³Π»Π°Π²Ρƒ "ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹".

Бинтаксис Ρ‚ΠΈΠΏΠ° мноТСства

Π’ΠΈΠΏ мноТСства Swift записываСтся ΠΊΠ°ΠΊ Set<Element>, Element являСтся Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² мноТСствС. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ массивов мноТСства Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ сокращСнной Ρ„ΠΎΡ€ΠΌΡ‹ записи.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ инициализация пустого мноТСства

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустоС мноТСство ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°:


var letters = Set()
print("letters ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Set с \(letters.count) элСмСнтами.")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "letters ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Set с 0 элСмСнтами."

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π’ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ letters Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΈΠ· Ρ‚ΠΈΠΏΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠ°ΠΊ Set<Character>.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ, Ссли контСкст прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ просто явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ константы, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустоС мноТСство ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ пустого Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива:


letters.insert("a")
// letters Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 1 элСмСнт Ρ‚ΠΈΠΏΠ° Character
letters = []
// letters Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ являСтся пустым мноТСством, Π½ΠΎ всС Π΅Ρ‰Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Set

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мноТСства ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² качСствС сокращСнной записи Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов Π² качСствС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ мноТСства.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ создаСт мноТСство favoriteGenres для хранСния String.


var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
// favoriteGenres Π±Ρ‹Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚Ρ€Π΅Ρ… Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ favoriteGenres объявлСна ΠΊΠ°ΠΊ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° String, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΠΊΠ°ΠΊ Set<String>. Π’Π°ΠΊ ΠΊΠ°ΠΊ это мноТСство ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ String, Ρ‚ΠΎ этому мноТСству ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния Ρ‚ΠΈΠΏΠ° String. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ здСсь ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ favoriteGenres трСмя значСниями Ρ‚ΠΈΠΏΠ° String, записанными Π² Π²ΠΈΠ΄Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ favoriteGenres объявлСн ΠΊΠ°ΠΊ пСрСмСнная (ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово var), Π½ΠΎ Π½Π΅ константа (ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово let), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ добавляСм ΠΈ удаляСм элСмСнты Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ мноТСства Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°, Ρ‚ΠΎ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ явно. Однако ΠΈΠ·-Π·Π° Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° Π² Swift Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ мноТСства, Ссли Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит элСмСнты ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ВмСсто этого инициализация favoriteGenres ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:


var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

Π’Π°ΠΊ ΠΊΠ°ΠΊ всС элСмСнты Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° массива ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ Swift ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти, Ρ‡Ρ‚ΠΎ Set<String> являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ favoriteGenres.

Доступ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ мноТСства

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСства ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ количСство элСмСнтов Π² мноТСствС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство count:


print("Π£ мСня Π΅ΡΡ‚ΡŒ \(favoriteGenres.count) Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΆΠ°Π½Ρ€Π°.")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "Π£ мСня Π΅ΡΡ‚ΡŒ 3 Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΆΠ°Π½Ρ€Π°."

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΡƒΠ»Π΅Π²ΠΎ свойство isEmpty Π² качСствС сокращСнной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия элСмСнтов Π²ΠΎ мноТСствС ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами Ρ€Π°Π²Π½ΠΎ Π»ΠΈ свойство count 0:


if favoriteGenres.isEmpty {
    print("МнС всС Ρ€Π°Π²Π½ΠΎ какая ΠΌΡƒΠ·Ρ‹ΠΊΠ° ΠΈΠ³Ρ€Π°Π΅Ρ‚. Π― Π½Π΅ ΠΏΡ€ΠΈΠ΄ΠΈΡ€Ρ‡ΠΈΠ².")
} else {
    print("Π£ мСня Π΅ΡΡ‚ΡŒ свои ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ прСдпочтСния.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "Π£ мСня Π΅ΡΡ‚ΡŒ свои ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ прСдпочтСния."

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт Π²ΠΎ мноТСство, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ insert(_:):


favoriteGenres.insert("Jazz")
// Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² favoriteGenres находится 4 элСмСнта

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· мноТСства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ remove(_:), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удаляСт элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‡Π»Π΅Π½ΠΎΠΌ мноТСства ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ nil, Ссли удаляСмого элСмСнта Π½Π΅Ρ‚. Π’Π°ΠΊ ΠΆΠ΅ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ мноТСства ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° removeAll().


if let removedGenre = favoriteGenres.remove("Rock") {
    print("\(removedGenre)? Π‘ мСня Ρ…Π²Π°Ρ‚ΠΈΡ‚.")
} else {
    print("МСня это Π½Π΅ сильно Π·Π°Π±ΠΎΡ‚ΠΈΡ‚.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "Rock? Π‘ мСня Ρ…Π²Π°Ρ‚ΠΈΡ‚."

МоТно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта Π²ΠΎ мноТСствС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ contains(_:):


if favoriteGenres.contains("Funk") {
    print("О! Π”Π° я встал с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π½ΠΎΠ³ΠΈ!")
} else {
    print("Блишком ΠΌΠ½ΠΎΠ³ΠΎ Funk'Π° Ρ‚ΡƒΡ‚.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "Блишком ΠΌΠ½ΠΎΠ³ΠΎ Funk'Π° Ρ‚ΡƒΡ‚."

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ мноТСству

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ мноТСству ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ†ΠΈΠΊΠ»Π° for-in.


for genre in favoriteGenres {
    print("\(genre)")
}
// Classical
// Jazz
// Hip hop

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ†ΠΈΠΊΠ»Ρƒ for-in Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² Π³Π»Π°Π²Π΅ Π¦ΠΈΠΊΠ»Ρ‹ For-in.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π² Swift Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ порядка. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ провСсти ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ мноТСству Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС,Β Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Β sorted(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉΒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π°ΠΌ элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ отсортированного массива, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <.


for genre in favoriteGenres.sorted() {
    print("\(genre)")
}
// Classical
// Hip hop
// Jazz

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с мноТСствами

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ мноТСств, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… мноТСств, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π²ΡƒΡ… мноТСств, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ содСрТат Π»ΠΈ мноТСства нСсколько, всС ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… значСния.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ мноТСств

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΠΈΠ·Ρƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π΄Π²Π° мноТСства a ΠΈ b Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ примСнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

οΏΌ

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ union (_:) для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ мноТСства состоящСго ΠΈΠ· всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΠΎΠΈΡ… мноТСств.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ intersection(_:) для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ мноТСства ΠΈΠ· ΠΎΠ±Ρ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π²ΡƒΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… мноТСств.
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ subtracting (_:) для создания мноТСства со значСниями Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ мноТСству ΠΈΠ· Π΄Π²ΡƒΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ….
  4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ symmetricDifference(_:) для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ мноТСства ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ Π² Π΄Π²ΡƒΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… мноТСствах.

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
 
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

Π’Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΡŒ ΠΈ равСнство мноТСств

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ Π½ΠΈΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ мноТСства a, b ΠΈ c. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ a являСтся надмноТСством мноТСства b, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ содСрТит всС Π΅Π³ΠΎ элСмСнты, соотвСтствСнно мноТСство b являСтся подмноТСством мноТСства a, ΠΎΠΏΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ всС Π΅Π³ΠΎ элСмСнты находятся Π² a. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° b ΠΈ c Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΡ… элСмСнтов.

οΏΌ

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ равСнства (==) для опрСдСлСния всС Π»ΠΈ значСния Π΄Π²ΡƒΡ… мноТСств ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ isSubset(of:) для опрСдСлСния всС Π»ΠΈ значСния мноТСства содСрТатся Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ мноТСствС.
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ isSuperset(of:), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ содСрТит Π»ΠΈ мноТСство всС значСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ мноТСства.
  4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ isStrictSubset(of:) ΠΈΠ»ΠΈ isStrictSuperset(of:) для опрСдСлСния являСтся Π»ΠΈ мноТСство подмноТСством ΠΈΠ»ΠΈ надмноТСством, Π½ΠΎ Π½Π΅ Ρ€Π°Π²Π½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ сСту.
  5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ isDisjoint(with:) для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ значСния Π² Π΄Π²ΡƒΡ… мноТСствах ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

let houseAnimals: Set = ["собака", "кошка"]
let farmAnimals: Set = ["ΠΊΠΎΡ€ΠΎΠ²Π°", "ΠΊΡƒΡ€ΠΈΡ†Π°", "Π±Π°Ρ€Π°Π½", "собака", "кошка"]
let cityAnimals: Set = ["Π²ΠΎΡ€ΠΎΠ½Π°", "ΠΌΡ‹ΡˆΡŒ"]
 
houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ прСдставляСт собой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. КаТдоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ связано с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выступаСт Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° этого значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ словаря. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ элСмСнтов Π² массивС, элСмСнты Π² словарС Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ порядка. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ значСния Π½Π° основС ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска опрСдСлСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ слова.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π’ΠΈΠΏ словаря в SwiftΒ ΠΈΠΌΠ΅Π΅Ρ‚ связь с классом Foundation NSDictionary. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± использовании словаря Π² Β Foundation ΠΈ Cocoa, см. Bridging Between Dictionary and NSDictionary.

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ синтаксис словаря

Π’ Swift Ρ‚ΠΈΠΏ словаря Π² ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Dictionary<Key, Value>, Π³Π΄Π΅ Key это Ρ‚ΠΈΠΏ значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ словаря, Π° Value это Ρ‚ΠΈΠΏ значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ для этих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π’ΠΈΠΏ словаря Key Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Hashable, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ значСния мноТСства.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² сокращСнной Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠ°ΠΊ [Key: Value]. Π₯отя Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, краткая Ρ„ΠΎΡ€ΠΌΠ° являСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ руководствС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ‚ΠΈΠΏΡƒ словаря.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого словаря

Подобно массивам Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°:


var namesOfIntegers = [Int: String]()
// namesOfIntegers являСтся пустым [Int: String] словарСм

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ [Int: String] для хранСния ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… для восприятия ΠΈΠΌΠ΅Π½ числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π•Π³ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ Int, Π° значСния - String.

Если контСкст ΡƒΠΆΠ΅ прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° пустого словаря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ [:] ( Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок):


namesOfIntegers[16] = "sixteen"
// namesOfIntegers Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 1 ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
namesOfIntegers = [:]
// namesOfIntegers Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡΡ‚ΡŒ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ [Int: String]

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря с литСралом словаря

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° словаря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ схоТий синтаксис с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ массива, рассмотрСнного Ρ€Π°Π½Π΅Π΅. Π›ΠΈΡ‚Π΅Ρ€Π°Π» словаря это ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ способ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ словаря.

ΠŸΠ°Ρ€Π° ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния. Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ словаря, ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π΅ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. ΠŸΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ написаны ΠΊΠ°ΠΊ список, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ запятыми ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок:

[ΠΊΠ»ΡŽΡ‡ 1: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, ΠΊΠ»ΡŽΡ‡ 2: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, ΠΊΠ»ΡŽΡ‡ 3: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3]

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ создаСтся ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… аэропортов. Π’ этом словарС ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€Π΅Ρ…Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠΉ ассоциации Π²ΠΎΠ·Π΄ΡƒΡˆΠ½ΠΎΠ³ΠΎ транспорта, Π° значСния - названия аэропортов:


var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ airports объявлСн с Ρ‚ΠΈΠΏΠΎΠΌ [​String​: ​String​], Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ String ΠΈ значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ String".

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ airports объявлСн ΠΊΠ°ΠΊ пСрСмСнная ( с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ var ), Π° Π½Π΅ константа ( с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ let ), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΎ аэропортов Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π½ΠΈΠΆΠ΅.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ airports ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° словаря, содСрТащСго Π΄Π²Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠ°Ρ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ "YYZ" ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "Toronto Pearson". Вторая ΠΏΠ°Ρ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ "DUB" ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "Dublin".

Π­Ρ‚ΠΎΡ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ содСрТит Π΄Π²Π΅ ΠΏΠ°Ρ€Ρ‹ String: String. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ присвоили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ airports ( ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ содСрТащий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ String ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ String значСния), ΠΈ поэтому присвоСниС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° словаря допустимо Π² качСствС способа ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ словаря airports двумя Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтами.

Подобно массивам, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ словаря Ссли Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° словаря, Ρ‡ΡŒΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ airports ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:


var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΊΠ»ΡŽΡ‡ΠΈ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ всС значСния ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ Swift ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти, Ρ‡Ρ‚ΠΎ [String: String] являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ для использования Π² словарС airports.

Доступ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ словаря

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис индСксов. Подобно массивам, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² словарС Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ read-only свойство count:


print("The airports dictionary contains \(airports.count) items.")
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The airports dictionary contains 2 items."

ЛогичСскоС свойство isEmpty ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС быстрого способа ΡƒΠ·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ свойство count Ρ€Π°Π²Π½Ρ‹ΠΌ 0:


if airports.isEmpty {
  print("The airports dictionary is empty.")
} else {
  print("The airports dictionary is not empty.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The airports dictionary is not empty."

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса индСксов. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π² качСствС индСкса, Π° Π·Π°Ρ‚Π΅ΠΌ присвойтС Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°:


airports["LHR"] = "London"
// ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ airports Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит 3 элСмСнта

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис индСксов для измСнСния значСния связанного с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ:


airports["LHR"] = "London Heathrow"
// Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для "LHR" помСнялось Π½Π° "London Heathrow"

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ индСксам, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ словаря updateValue(_:forKey:), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. Подобно ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ с индСксами Π²Π²Π΅Ρ€Ρ…Ρƒ, ΠΌΠ΅Ρ‚ΠΎΠ΄ updateValue(_:forKey:) устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ»ΡŽΡ‡Π° Ссли ΠΎΠ½ΠΎ Π½Π΅ сущСствуСт, ΠΈΠ»ΠΈ обновляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли этот ΠΊΠ»ΡŽΡ‡ ΡƒΠΆΠ΅ сущСствуСт. Однако, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ индСксов, ΠΌΠ΅Ρ‚ΠΎΠ΄ updateValue(_:forKey:) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС выполнСния обновлСния. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΠΎΡΡ‚ΠΎΡΠ»ΠΎΡΡŒ Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠœΠ΅Ρ‚ΠΎΠ΄ updateValue(_:forKey:) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏΡƒ значСния словаря. НапримСр, для словаря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ String значСния, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ String? Ρ‚ΠΈΠΏ, ΠΈΠ»ΠΈ "ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ String". Π­Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ содСрТит староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для этого ΠΊΠ»ΡŽΡ‡Π°, Ссли ΠΎΠ½ΠΎ сущСствовало Π΄ΠΎ обновлСния, Π»ΠΈΠ±ΠΎ nil Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ сущСствовало.


if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
  print("The old value for DUB was \(oldValue).")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The old value for DUB was Dublin."

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис индСксов Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· словаря для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ для Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния, индСкс словаря Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря. Если ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, индСкс Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, содСрТащСС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для этого ΠΊΠ»ΡŽΡ‡Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС индСкс Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ nil:


if let airportName = airports["DUB"] {
  print("The name of the airport is \(airportName).")
} else {
  print("That airport is not in the airports dictionary.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The name of the airport is Dublin Airport."

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис индСксов для удалСния ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· словаря ΠΏΡƒΡ‚Π΅ΠΌ присвоСния nil Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ для этого ΠΊΠ»ΡŽΡ‡Π°:


airports["APL"] = "Apple International"
// "Apple International" Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ аэропорт для APL, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΠΈΠΌ Π΅Π³ΠΎ
airports["APL"] = nil
// APL Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· словаря

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° removeValue(forKey:). Π­Ρ‚ΠΎΡ‚ мСтод удаляСт ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ссли ΠΎΠ½Π° сущСствуСт ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ nil Ссли значСния Π½Π΅ сущСствуСт:


if let removedValue = airports.removeValue(forKey: "DUB") {
  print("The removed airport's name is \(removedValue).")
} else {
  print("The airports dictionary does not contain a value for DUB.")
}
// Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "The removed airport's name is Dublin Airport."

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² словарС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ for-in Ρ†ΠΈΠΊΠ»Π°. КаТдоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² словарС возвращаСтся ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅),ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ части ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ константам ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:


for (airportCode, airportName) in airports {
  print("\(airportCode): \(airportName)")
}
// LHR: London Heathrow
// YYZ: Toronto Pearson

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Ρ†ΠΈΠΊΠ» for-in, смотритС Π³Π»Π°Π²Ρƒ Π¦ΠΈΠΊΠ» for-in.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π΅Π³ΠΎ свойствам keys ΠΈ values:


for airportCode in airports.keys {
  print("Airport code: \(airportCode)")
}
// Airport code: LHR
// Airport code: YYZ

for airportName in airports.values {
  print("Airport name: \(airportName)")
}
// Airport name: London Heathrow
// Airport name: Toronto Pearson

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠ»ΠΈ значСния словаря вмСстС с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Array, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств keys ΠΈ values:


let airportCodes = [String](airports.keys)
// airportCodes Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ["YYZ", "LHR"]

let airportNames = [String](airports.values)
// airportNames Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ["Toronto Pearson", "London Heathrow"]

Π’ΠΈΠΏ словаря в Swift являСтся нСупорядочСнной ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ. Для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈΠ»ΠΈ значСниям словаря Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ sorted() для свойств keys ΠΈΠ»ΠΈ values словаря.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅
Руководство ΠΏΠΎ Swift