본문 바로가기
프로그래밍/Spring

9. Swift의 배열(Array)과 딕셔너리(Dictionary) 그리고 세트(Set)

by Mr-후 2019. 2. 16.
반응형

9. Swift의 배열(Array)과 딕셔너리(Dictionary) 그리고 세트(Set)


배열 타입을 선언하는 방법은 다양하다. 

let 키워드를 사용해 상수로 선언할 경우 변경할 수 없는 배열이 되고

var 키워드를 사용해 변수로 선언해주면 변경 가능한 배열이 된다. 실제로 배열을 사용할 때는  Array라는 키워드와 타입 이름의 조합으로 사용한다. 


var names: Array<String> = ["이름1", "이름2", "이름3"] 


또다른 방법은 대괄호로 값을 묶어 Array타입 임을 표현할 수 있다. 


var names: [String] = ["이름1", "이름2", "이름3"] 


빈 배열은 이니셜라이저 또는 리터럴 문법을 통해 생성해줄 수 있으며 isEmpty 프로퍼티로 비어있는 배열인지 확인 가능하다. 


var emptyArray: [Any] = [] 
print(emptyArray.isEmpty)    // true 


배열 요소의 갯수는 count 프로퍼티를 통해 확인하면 된다. 


스위프트의 Array는 C언어의 배열처럼 Buffer이나 C언어처럼 한 번 선언하면 크기가 고정된 버퍼가 아니라 필요에 따라 자동으로 버퍼의 크기를 조절해주므로 요소의 삽입 및 삭제가 자유롭다.    

배열에 접근하는 방식은 


first, 

last, 

index(of:)

append(_:)

remove(_:) 


등의 메서드를 이용할 수 있다. 

배열은 범위 연산자 사용이 가능하다. names[1 ... 3] 또는 names[1 ... 3] = ["이름1", "이름2", "이름3"] 와 같이 범위에 맞게 요소를 바꾸는 것도 가능하다. 


딕셔너리. 

딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 컬렉션 타입. 키가 하나 이상일 수 있으나 키를 중복해서 사용할 수 없다. 

딕셔너리는 Dictionary라는 키워드와 키의 타입과 값의 타입 이름을 조합으로 써준다. 대괄호로 키와 값의 타입 이름의 쌍을 묶어 딕셔너리 타입 임을 표현한다. 

let 키워드를 사용하여 상수로 선언하면 변경 불가능한 딕셔너리가 되고, 

var 키워드를 사용하여 변수로 선언해주면 변경 가능한 딕셔너리가 된다. 

배열과 마찬가지로 isEmpty를 통해 비어있는지 확인가능하다. 그리고 count프로퍼티로 딕셔너리의 요소 개수를 확인할 수 있다. 


//typealias를 이용 더 단순하게 표현해 볼 수 있다. 

typealias StringIntDictionary = [String: Int] 

var ageInfo: StringIntDictionary = ["age" : 45]

let age: Int = ageInfo["age"]! 

print("age : \(age) " // -> age : 45 


다른 방법으로 Dictionary를 생성하는 방법 


var numberForName: Dictionary<String, Int> = Dictionary<String, Int>() 

var numberForName: [String, Int] = [String: Int]()

var numberForName: StringIntDictionary = StringIntDictionary() 


다양한 방법으로 사용가능하다. 

딕셔너리는 배열과 다르게 딕셔너리 내부에 없는 키로 접근해도 오류가 발생하지 않는다. 

다만 nil을 반환한다. 특정 키에 해당하는 값을 제거하려면 removeValue(forKey:)를 사용한다. 


세트.

세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입, 세트 내의 값은 모두 유일한 값, 즉 중복된 값이 존재하지 않는다. 세트는 보통 순서가 중요하지 않거나 각 요소가 유일한 값 이어야 하는 경우에 사용하며 세트의 요소로는 해시 가능한 값이 들어와야 한다. (스위프트의 기본 데이터 타입은 모두 해시 가능한 값이다.) 

세트는 Set 키워드와 타입 이름의 조합으로 사용한다. 


var names: Set<String> = Set<String>() //빈 세트 생성 

var names: Set<String> = [] //빈 세트 생성 


배열과 같이 대괄호로 값들을 묶어 세트 타입임을 표현한다. 줄여서 표현할 수 있는 축약형이 없다. 

let 키워드를 사용하여 상수로 선언하면 변경 불가능한 세트가 되고 

var 키워드를 사용해서 변수로 선언하면 변경 가능한 세트가 된다. 

빈 세트는 이니셜라이저 또는 리터럴 문법을 통해 생성 가능하다. isEmpty 프로퍼티를 통해 비어 있는 세트인지 확인 가능하다. 

세트 요소의 개수는 역시 count 퍼로퍼티로 가능하다. 

세트에 요소 추가는 insert(_:), 제거는 remov(_:) 메서드를 사용한다. 

중복된 값을 넣을 경우 하나만 남게 된다. 


var names: Set<String> = ["이름1", "이름2", "이름3", "이름1"]
print(names.count) // 3


세트는 자신 내부의 값들이 모두 유일함을 보장하므로 집합관계를 표현하고자 할 때 유용하게 쓰일 수 있다. 

두 세트의 교집합, 합집합 등을 연산하기에 매우 적합하다. 또 sorted() 메서드를 통해 정렬된 배열을 반환해줄수도 있다. 


.union()  //합집합

.isDisjoint(with:) //서로 배타적인지

.isSubset(of:)    //부분집합인가

.isSuperset(of:) //전체집합인가



반응형

'프로그래밍 > Spring' 카테고리의 다른 글

11. Switch문의 골격  (0) 2019.02.18
10. Swift 열거형(enum)  (0) 2019.02.17
8. Swift 타입 별칭(typealias) & 튜플(Tuple)  (0) 2019.02.15
7. Swift Any, AnyObject & nil  (0) 2019.02.14
6. 스위프트 변수와 상수  (0) 2019.02.13