맛동산이

스위프트 스터디 3탄) 콜렉션 타입(Collection Types) 본문

앱/Swift 문법

스위프트 스터디 3탄) 콜렉션 타입(Collection Types)

진ddang 2023. 7. 8. 16:14

 

스위프트 공식문서를 참조하였습니다.



콜렉션 타입

스위프트에서는 3개의 콜렉션 타입을 제공한다.( array, set, dictionary)

  • 콜렉션의 경우 또한 상수 let으로 할당하게 되면 변경 불가능 하다.

배열(Array)

배열 선언

var someInt = [Int]() // int형 배열 선언 someInt.append(3) //배열에 3추가 someInt=[]  //배열비우기

기본 배열값으로 빈 배열 생성

repeating과 count를 통해서 배열을 생성할수 있다.

var threeDouble =Array(repeating : 3, count: 3) // threeDouble = (Int)[3,3,3]

배열을 배열끼리 더하기

var someArray = Array(repeating : 3, count: 3) //someArray = [3,3,3] var sixArray = someArray + someArray //sixArray = [3,3,3,3,3,3]

리터럴을 이용한 배열의 생성

var list:[String] = ["eggs","pork", "beef"] var list = ["eggs","pork", "beef"]

 

배열 접근 및 변환

문자열과 동일하게 사용가능하다.

count, isEmpty, insert( at: ), remove(at: ), append

프로퍼티와 메쏘드를 사용해서 접근하고 확인가능하다.

특정위치로의 원소 접근은 인덱스를 통한 직접 접근이 가능함

 

배열의 순환

배열의 순환 같은 경우 python과 동일하게 for in loop를 사용할수 있다.

var list:[String] = ["eggs","pork", "beef"] for item in list{ 	print(item)} // eggs, pork, beef

 

값과 인덱스 둘다 출력을 해야 할때는

enumerated()

를 사용하면 된다.

var shoppingList = ["Six eggs", "Milk", "Flour"] for (index, value) in shoppingList.enumerated() { print("Item \(index + 1): \(value)") } // Item 1: Six eggs // Item 2: Milk // Item 3: Flour

 

셋(Set) : 집합

Set 형태로 저장 되기 위해서는 데이터 타입이 반듯이

hashable

해야한다.

스위프트에서

hashable

한 데이터 타입은

Double, Boo, String, Int

형이다.

 

hashable???

hashable이란 기본적으로 단순한 숫자로 데이터를 변환 가능한 값을 의미한다.

hashable의 정의는 Hashable Protocol을 지키고 있다 이며,

Hashable Protocol의 정의는 Equatable Protocol을 지킨다 이다.

Equatable Protocol이란 == 연산자 혹은 != 연산자가 가능하다는 뜻

 

빈 Set 생성

//일반 생성 var letters = Set<Character>()  //타입 설정하여 리터럴로 선언 var genres:Set<String> = ["Rock", "Classic", "Hip hop"]  //타입추론을 통한 선언 var genres:Set = ["Rock", "Classic", "Hip hop"]

 

set 접근과 변경

일반 배열과 동일하게 count, insert, remove, isEmpty와 같은 프로퍼티가 가능하지만 중요한점은 직접적으로 문자열이나 값을 통해 접근가능하다.

  • Set의 가장 중요한점은 탐색 속도가 빠르다는 점이다.

 

Set 명령

inersection, symmetricDifference, union, subtracting을 사용가능하다.

 

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]

 

Set의 맴버십과 동등 비교

맴버 여부의 확인을 하기 위해서는 == 연산자와

isSuperset(of: ), isStrictSubset(of: ), isStrictSuperset(of: ), isDisjoint(with: )

를 사용할수 있다.

superset은 교집합이 있는가,

strict subset은 완전 안에 포함되는가

strict superset은 완전 포합하고 있는가

dis joint는 완전 개별된 집합인가

그리고 모든 메쏘드들은 bool값을 반환한다.

 

사전 (Dictionaries)

dictionary는 key와 value를 하나의 묶음으로 저장하는 방식인 콜렉션 타입이다.

c++의 해쉬와 동일한 방법이다.

빈 dictionary 생성

var diction = [Int:String]() diction[19]="nine" diction=[:] // 초기화

 

리터럴을 이용한 dictionary생성

var diction: [String:String] =["hi":"myfriend", "hellow":"buddy"]

 

dictionary의 접근과 변경

동일하게 count와 isEmpty사용가능

키를 이용해서 값 할당 가능

diction["hi"] = "go to hell" //var diction: [String:String] =["hi":"go to hell", "hellow":"buddy"]

 


Uploaded by

N2T
반응형