-
[Swift] Collection (Array, Dictionary, Set)Swift 2022. 2. 15. 08:34
ìŽë² í¬ì€í ììë Swiftì Collectionì ëíŽ ìì볎ì.
Collectionì ë§ì ë°ìŽí°ë€ì 묶ìŽì íšìšì ìŒë¡ ì²ëЬíêž° ìíŽ ì¬ì©íë€.
Swift Collectionì êµ¬ì¡°ì²Žë¡ êµ¬íëìŽìê³ , ì£Œë¡ ê° íììŒë¡ ì¬ì©íë€.
Swift Collectionìë ë°ìŽí°ë¥Œ ììëë¡ ì ì¥íë ë°°ìŽ (Array), í€ì ê°ì íëì ììŒë¡ ì ì¥íë ëì ë늬 (Dictionary), ì§í© ì°ì°ì ì ê³µíê³ ê³ ì ê°ë€ì ììê° ì§ì ëì§ ìë ì§í© (Set) ìŽ ìë€.
컬ë ì ì ê°ë³ì±ì 컬ë ì ì ì ì¥ë ììë€ìê² ìí¥ì ì£Œì§ ìëë€.
ë°ëŒì ë¶ë³ 컬ë ì (let í€ìë륌 ì¬ì©íì¬ ì ìží 컬ë ì )ì ê°ë³ì ìž ììê° ì ì¥ëìŽìì 겜ì°, ìì륌 ìë¡ê² ì¶ê°íê±°ë ìì íë ê²ì ë¶ê°ë¥íì§ë§ ìì륌 ìì íë ê²ì ê°ë¥íë€.
ë°ë©Ž ê°ë³ 컬ë ì (var í€ìë륌 ì¬ì©íì¬ ì ìží 컬ë ì )ì ë¶ë³ì ìž ììê° ì ì¥ëìŽìì 겜ì°, ìì륌 ìë¡ê² ì¶ê°íê±°ë ìì íë ê²ì ê°ë¥íì§ë§ ìì륌 ìì íë ê²ì ë¶ê°ë¥íë€.
ìŽì ê°ê°ì í¹ì§ì ëíŽì ìì볎ëë¡ íì.
1. Array (ë°°ìŽ)
ë°°ìŽì ìì±íê³ ì ìžíë ë°©ë²ì ìëì ê°ë€.
// #1. ë°°ìŽ ëŠ¬í°ëŽë¡ ì ì ë°°ìŽ ì ìžíêž° let nums = [1, 2, 3] // #2. ë¹ ë°°ìŽ ë§ë€êž° (ë¹ ëŠ¬í°ëŽ -> íì ìŽë ží ìŽì íì) let emptyArray : [Int] = [] // #3. ìì±ì ì¬ì©íŽì ë§ë€êž° (ì ì 묞ë²) let emptyArray2 = Array<Int>() // #4. ëšì¶ ë¬žë² let emptyArray3 = [Int]() // #5. ë°°ìŽ ë§ë í Ʞ볞ê°ìŒë¡ ì±ì°êž° // 첫ë²ì§ž íëŒë¯ží°: ë°°ìŽ ì±ìž Ʞ볞ê°, ëë²ì§ž íëŒë¯ží°: ë°°ìŽ ì±ìž ììì ì«ì let zeroArray = [Int](repeating: 0, count: 10) // 0ìŽ 10ê° ì±ìì§ int ë°°ìŽë°°ìŽì ë°ìŽí°ë¥Œ ììëë¡ ì ì¥íë Ordered CollectionìŽë€.
ë°°ìŽ ëŽì ì ì¥ëë ë°ìŽí°ì ìë£íì 몚ë ê°ììŒíê³ (Single Type), ë°°ìŽì ìë£íì ì§ì ëª ìíì¬ ì ìžíê±°ë ë°°ìŽ ìì± ìì ì ììì ìë£íì íµíŽ ê²°ì ëë€.
Swiftì ë°°ìŽì Generic CollectionìŽë€. ê·žë êž° ë묞ì 몚ë íì ìì ì¬ì©í ì ìë ê²ìŽë€.
ë°°ìŽ ëŽì ì ì¥ëë ììë€ì ê°ì ì€ë³µìŽì¬ë ìêŽìŽ ìë€.
ë°°ìŽì ìžë±ì€ë 0ë¶í° ììíë ì ì ìžë±ì€ìŽê³ (0-based Index), ì ì¥ëë ììì ë°ëŒ ìëìŒë¡ ì§ì ëë€.
0-based Index륌 ì¬ì©íêž° ë묞ì ììì ì ê·Œí ëìë ìžë±ì€ë¥Œ ì¬ì©íê±°ë, subscript 묞ë²ì ì¬ì©íì¬ ì ê·Œí멎 ëë€.

ì°žê³ ë¡, startIndexë ë¹ìŽìì§ ìì ë°°ìŽì 첫ë²ì§ž ììì ìžë±ì€ë¥Œ ì믞íë€.

ì¬êž°ì 죌ìíŽìŒí ê²ìŽ ìë€.
endIndexëŒê³ í멎 ë°ë¡ ë§ì§ë§ ììì ìžë±ì€ëŒê³ ìê°íêž° ì¬ìŽë°, endIndexë ë§ì§ë§ ììì ìžë±ì€ê° ìë ë§ì§ë§ ììì ë€ì ìžë±ì€ë¥Œ ì믞íë€.
ë°ëŒì ë§ì§ë§ ììì ìžë±ì€ë¥Œ ìê³ ì¶ì 겜ì°, index(before:) ë©ìë륌 ìŽì©íŽìŒíë€.


ëí first, last ìì±ì ìŽì©í멎 ë°°ìŽì 첫ë²ì§ž ììì ë§ì§ë§ ìì륌 Optional StringìŒë¡ 늬íŽíŽì€ë€.
ë°°ìŽì ì±ë¥ì í¬ê² ë ê°ì§ ììžì ë°ëŒ ê²°ì ëë€.
첫ë²ì§ž ììžì ìœì ìì¹ìŽë€. ë°°ìŽì ëì ìì륌 ì¶ê°í ëìë ë°°ìŽì í¬êž°ì ìêŽ ììŽ ìŒì ìê° ëì ìíëë€.
íì§ë§ ë°°ìŽì í¹ì ìì¹ (ì: ë°°ìŽì ê°ìŽë°)ì ìì륌 ì¶ê°í ëìë ë ë§ì ìê°ìŽ ììëë€.
ë°°ìŽ ììê° ì€ê°ì ìœì ë멎, ê·ž ë€ì ìë 몚ë ììë€ìŽ ìžë±ì€ 1ë§íŒ ë€ë¡ ìŽëíŽìŒíë€. ê·žë êž° ë묞ì ë°°ìŽì ìì ìê° 2ë°°ê° ëë€ë©Ž ìœì íëë° ììëë ìê°ë 2ë°°ê° ëë€.
ëë²ì§ž ììžì ë°°ìŽì í¬êž°ìŽë€. 몚ë ë°°ìŽì ìì륌 ì ì¥íêž° ìíŽ ìŒì ëì ë©ëªšëŠ¬ë¥Œ ììœíŽëë€.
ë§ìœ ìŽë¯ž ìµë ì©ëìŽ ë ë°°ìŽì ìë¡ìŽ ìì륌 ì¶ê°íë €ê³ í 겜ì°, ë°°ìŽì ë í° ë©ëªšëЬ ììì í ë¹íê³ , íŽë¹ ìì륌 ìë¡ìŽ ì ì¥ê³µê°ì ë³µì¬íë€. Swift íì€ ëŒìŽëžë¬ëЬë ì ì¥ê³µê°ìŽ ë¶ì¡±íê³ , ë³µì¬ê° íìí ëìë§ ì©ëì ìŠê°ìí€ê² íšìŒë¡ìš ì¬êž°ì ììëë ìê°ì ìµìííëë¡ íë€.
ë°°ìŽì ìì륌 ì¶ê°í ëìë append(_:) ë©ìë ëë append(contentsOf:) ë©ìë륌 ì¬ì©íë€.
append(_:) ë©ìëë íëì ììë§ ì¶ê°í ë, append(contentsOf:) ë©ìëë ì¬ë¬ ê°ì ìì륌 íë²ì ì¶ê°í ë ì¬ì©íë€.
ë°°ìŽì ì€ê°ì ìì륌 ì¶ê°í ëìë insert(_:at:) ë©ìë ëë insert(contentsOf:at:) ë©ìë륌 ì¬ì©íë€.
insert(_:at:) ë©ìëë í¹ì ìì¹ì ìì륌 ì¶ê°í ë, insert(contentsOf:at:) ë©ìëë ë°°ìŽì í¹ì ìì¹ì 2ê° ìŽìì ìì륌 ì¶ê°í ë ì¬ì©íë€.
ë°°ìŽì ìì륌 ìì í ëìë subscript륌 ìŽì©íì¬ ë²ì륌 íµíŽ ìì íê±°ë ë©ìë륌 ìŽì©íì¬ ìì í멎 ëë€.

subscript륌 ìŽì©íì¬ ìì íêž° replaceSubrange(_:with:) ë©ìëë íëŒë¯ží°ë¡ ì ë¬ë ë²ìì ìì륌 ì ë¬ë 컬ë ì ìŒë¡ ë³ê²œíë€.

replaceSubrange ë©ìë륌 ìŽì©íì¬ ìì íêž° ë°°ìŽì í¹ì ìì¹ì 졎ì¬íë ìì륌 ìì í ëìë remove(at:) ë©ìë륌 ì¬ì©íëë°, ìŽ ë©ìëë ì ë¬ë ìžë±ì€ì ìì륌 ìì í íì ìì ë ììì ê°ì 늬íŽíŽì€ë€.
ë°°ìŽì 첫ë²ì§ž ìì륌 ìì í ëìë removeFirst() ë©ìë륌 ì¬ì©íëë°, ìŽ ë©ìëë 첫ë²ì§ž ìì륌 ìì íê³ ìì ë ììì ê°ì 늬íŽíŽì€ë€.
ë°°ìŽì ì ìŒ ìììë¶í° ìíë ê°¯ìë§íŒì ìì륌 ìì í 겜ì°, removeFirst(_:) ë©ìë륌 ìŽì©íë€.

ë°°ìŽì ë§ì§ë§ ìì륌 ìì í ëìë removeLast() ë©ìë륌 ìŽì©íëë°, ë§ì§ë§ ìì륌 ìì íê³ ìì ë ììì ê°ì 늬íŽíŽì€ë€.
ë°°ìŽì ë§ì§ë§ ììë¡ë¶í° ìíë ê°¯ìë§íŒì ìì륌 ìì í 겜ì°ìë removeLast(_:) ë©ìë륌 ìŽì©íë€.

ë°°ìŽì ìì륌 íë²ì 몚ë ìì í 겜ì°, removeAll(keepingCapacity:) ë©ìë륌 ì¬ì©í멎 ëë€.
keepingCapacityë Boolean ê°ìŒë¡, Ʞ볞ê°ì falseìŽë€. ìì륌 몚ë ìì í멎 ë°°ìŽìŽ ì°šì§íë ë©ëªšëЬ ê³µê°ë 몚ë ì ê±°ëë€.
ë°ë©Ž keepingCapacityì Boolean ê°ìŽ trueëŒë©Ž, ìì륌 몚ë ìì í íìë ë°°ìŽìŽ ì°šì§íë ë©ëªšëЬ ê³µê°ìŽ ê·žëë¡ ì ì§ëë€.
ë°°ìŽ ì€ê°ì ìì륌 ìì í 겜ì°, ë€ì ì ì¥ë ììë€ìŽ ììŒë¡ ìŽëíê³ ìžë±ì€ë 몚ë ì ë°ìŽížëëë°, ì€ë²í€ëê° ë°ìíêž° ë묞ì ëëë¡ìŽë©Ž ë°°ìŽì ë§ì§ë§ìì ìì륌 ì¶ê°íê±°ë ìì íë ê²ìŽ ì¢ë€.
ìì ë©ìëë€ì ì¬ì©íì¬ ë°°ìŽì ììë€ì ìì í ëìë, ë°°ìŽìŽ ë¹ìŽììŽìë ìëë€.
íì§ë§ popLast() ë©ìë륌 ì¬ì©í멎, ë°°ìŽìŽ ë¹ìŽìì ëìë nilì 늬íŽíêž° ë묞ì ìì íë€.

ëí í¹ì ë²ìì ë°°ìŽì ìì륌 ìì í ëìë subscript륌 ìŽì©íì¬ ìì íê³ ì íë ë²ìì ë¹ ë°°ìŽì ì ë¬íì¬ ìì íê±°ë, removeSubrange(_:) ë©ìë륌 ìŽì©íì¬ ìì í멎 ëë€.

ê·žëŠ¬ê³ ë°°ìŽì ì ë ¬í ëìë sorted() ë©ìëì sort() ë©ìë륌 ìŽì©íë€.
sorted() ë©ìëë ì ë ¬ë ìë¡ìŽ ë°°ìŽì 늬íŽíë€. ìŠ, ì볞 ë°°ìŽì ë³íšìŽ ìë€.
ë°ë©Ž sort() ë©ìëë ì볞 ë°°ìŽì ì§ì ì ë ¬íë€.

ë°°ìŽì ë°°ìŽ ê°ì ë¹êµí ë ììì ëìŒì±ë¿ë§ ìëëŒ ììì ììë ê³ ë €íë€.

2. Dictionary (ëì ë늬)
ëì ë늬륌 ìì±íê³ ì ìžíë ë°©ë²ì ìëì ê°ë€.
// #1. 늬í°ëŽë¡ ëì ë늬 ìì± var num = ["1": "One", "2": "Two", "3": "Three", "4": "Four", "5": "Five"] // #2. ë¹ ëì ë늬 ìì± -> Type Annotation íì! let emptyDict: [String: String] = [:] // #3. ìì±ì ì¬ì©íŽì ë¹ ëì ë늬 ìì± (ëšì¶ 묞ë²) let emptyDict2 = [String: String]() // #4. ìì±ì ì¬ì©íŽì ë¹ ëì ë늬 ìì± (ì ì 묞ë²) let emptyDict3 = Dictionary<String, String>()ëì ë늬ë í€ì ê° (key, value) ì íëì ììŒë¡ ì ì¥íë Unordered CollectionìŽë€.
Unordered CollectionìŽêž° ë묞ì ììê° ë³Žì¥ëì§ ìê³ , valueì ì ê·Œí ëìë key륌 íµíŽì ì ê·ŒíŽìŒíë€.
ë§ìœ ì ë¬ë í€ê° ìë 겜ì°ìë nilì 늬íŽíë€.
ê·žëŠ¬ê³ ì ë¬ë í€ê° ìì ë, Ʞ볞ê°ì 늬íŽíëë¡ êž°ë³žê°ì ì§ì íë ê²ë ê°ë¥íë€.

ëì ë늬ë ììê° ìêž° ë묞ì ë°°ìŽê³Œ ë¬ëЬ ììê° í¹ì ìì¹ì ìœì ëê±°ë, ìì ëë ê²ì ëíŽ ê±±ì í íìê° ìë€. ë°ëŒì ìœì /ìì íëë° ëë ìê°ì íì ìŒì íë€. í¹ì ìì륌 ì¡°ííëë° ììëë ìê°ë ë°°ìŽë³Žë€ ë¹ ë¥Žë€.
ëì ë늬ìì keyë ì ìŒíŽìŒíê³ valueë ì€ë³µëìŽë ìêŽìŽ ìë€.
ëì ë늬ë Single TypeìŒë¡, keyì valueì ìë£íì ê°ê° 몚ë ê°ììŒ íë€.
ëì ë늬ì ìë¡ìŽ ìì륌 ì¶ê°í ëìë key ê°ì ìŽì©íì¬ ì ì¥íë€.

ë§ìœ ìŽë¯ž 졎ì¬íë í€ë¥Œ ë ì¶ê°í 겜ì°ìë, ê°ìŽ ìë¡ê² ì¶ê°ëë ê²ìŽ ìëëŒ êž°ì¡Žì 졎ì¬íë í€ì ì ì¥ë ê°ìŽ êµì²Žëë€.
ë€ì ì 늬íŽë³Žë©Ž!
í€ë¥Œ ìŽì©íì¬ ìì륌 ì¶ê°í ë, í€ê° 졎ì¬íì§ ìì ëìë ìë¡ìŽ ìì륌 ì¶ê° (Insert)íê³ , í€ê° 졎ì¬í ëìë Ʞ졎 ê°ì êµì²Ž (Update)íë€. ìŽë¥Œ Upsert ëŒê³ ë íë€.
ëì ë늬ìì í¹ì í€ì íŽë¹íë ê°ì ì ê±°í ëìë removeValue(forKey:) ë©ìë륌 ìŽì©íë€.
ìŽ ë©ìë륌 ì¬ì©í멎, í€ì íŽë¹íë ê°ìŽ ì ê±°ë í í€ì íŽë¹íë ê°ìŽ ëŠ¬íŽëë€.
ë§ìœ 졎ì¬íì§ ìë í€ë¥Œ ìì íë €ê³ í멎 nilìŽ ì¶ë ¥ëë€.
ëì ë늬ì 몚ë í€ì ìì륌 ìì í ëìë removeAll() ë©ìë륌 ìŽì©í멎 ëë€.

ëí ëì ë늬ë Unordered CollectionìŽêž° ë묞ì ëì ë늬 ê°ì ë¹êµí ë ìì륌 ìêŽíì§ ìê³ ë¹êµíë€.
ë°ëŒì ì ì¥ëìŽìë í€ì ê°ë§ ëìŒíë€ë©Ž ê°ì ëì ëëŠ¬ë¡ íëšíë€.
ìë ìì륌 볎멎 num곌 anotherNum ëì ë늬ë ê°ì ëì ë늬ìì ì ì ìë€.

3. Set (ì§í©)
Setì Unordered CollectionìŽê³ , ìžë±ì€ ëí ì¬ì©íì§ ìëë€.
Setì ìì±íê³ ì ìžíë ë°©ë²ì ë€ì곌 ê°ë€.
var set1: Set<String> = Set<String>() var set2: Set<String> = [] var nums: Set<Int> = [1, 2, 3, 4, 5, 6]Setì ì ìží ëìë ë°ëì Type Annotationì íŽì£ŒìŽìŒíë€. ê·žë ì§ ììŒë©Ž íì ì¶ë¡ ìì ë°°ìŽë¡ ì¶ë¡ íêž° ë묞ì 죌ìíëë¡ íì.
ë³Žíµ ì ë ¬ ììë³Žë€ ê²ì ììê° ì€ìí ë ë°°ìŽ ëì ì ì¬ì©íë©°, ë°°ìŽê³Œ ë¬ëЬ ì€ë³µì íì©íì§ ìëë€.
ë°ëŒì ì€ë³µìž ê°ë€ì ì ì¥í멎 ì ì ë¡ ì€ë³µ ê°ë€ìŽ ì ê±°ëë€.

ëìŒí ìë£íì ììë§ ì ì¥íê³ (Single Type), ì ì¥íë ê°ì ì ìŒíŽìŒíë€. (Single Value)
Setì ìì륌 ì¶ê°í ëìë insert(_:) ë©ìë ëë update(with:) ë©ìë륌 ì¬ì©íë€.
insert(_:) ë©ìë륌 ì¬ì©í ë ìŽë¯ž 졎ì¬íë ê°ì ë€ì ì¶ê°íë €ê³ í멎, ì¶ê°ëì§ ìê³ ë¬Žìëë€.

update(with:) ë©ìëë ì ë¬ë ê°ì ìë¡ìŽ ììë¡ ì¶ê°íŽì€ë€.
ì ë¬ë ê°ìŽ êž°ì¡Žì 졎ì¬íì§ ìë ìë¡ìŽ ê°ìŽëŒë©Ž ì ìì ìŒë¡ ì¶ê°ê° ìë£ëê³ nilì 늬íŽíë€.
ìŽë¯ž 졎ì¬íë ê°ìŽëŒë©Ž Ʞ졎 ìì륌 ìë¡ìŽ ê°ìŒë¡ ë첎íê³ ê·ž ê°ì Optionalë¡ ëŠ¬íŽíŽì€ë€.

ìì륌 ìì í ëìë remove(_:) ë©ìë륌 ìŽì©íë€.
ììê° ì ìì ìŒë¡ ìì ë멎 ìì í ìì륌 늬íŽíê³ , 졎ì¬íì§ ìë ìì륌 ìì íë €ê³ í멎 nilì 늬íŽíë€.
ê·žëŠ¬ê³ Setì 몚ë ìì륌 ìì í ëìë removeAll() ë©ìë륌 ìŽì©í멎 ëë€.

Setì Unordered CollectionìŽë¯ë¡ SetëŒëЬ ë¹êµí ë ììì ëìŒì±ë§ ê³ ë €íì¬ íëšíë€.
ë§ìœ ìì륌 ììëë¡ ë¹êµíê³ ì¶ë€ë©Ž elementsEqual ë©ìë륌 ì¬ì©í멎 ëë€.

Setì ë€ìí ì§í© ë©ìë륌 ì ê³µíŽì£Œëë°, ììží ëŽì©ì ìë Apple ê³µì묞ì륌 ì°žê³ íëë¡ íì.
Apple Developer Documentation
developer.apple.com
'Swift' 칎í ê³ ëŠ¬ì ë€ë¥ž êž
[Swift] CGFloat (0) 2022.02.15 [Swift] Enumeration (ìŽê±°í), Raw Value (ììê°) (0) 2022.02.15 [Swift] Tuples (0) 2022.02.15 [Swift] Closure, Syntax Optimization (0) 2022.02.15 [Swift] Function - 3 (Implicit Return, Function Notation, Function Types) (0) 2022.02.15