본문 바로가기
etc/Swift

컬렉션 타입

by IT learning 2021. 5. 11.
728x90

컬렉션 타입으로는 Array, Dictionary, Set이 존재한다.

 

Array - 순서가 있는 리스트 컬렉션

Dictionary - 키와 값의 쌍으로 이루어진 컬렉션

Set - 순서가 없고, 멤버가 유일한 컬렉션

 

Array

var integers: Array<Int> = Array<Int>() // 빈 Array 생성
integers.append(1)
integers.append(100)
//integers.append(101.1)
print(integers)

위의 선언과 같이 Array<Int>() 를 선언하면, 빈 Array가 생성이 된다.

이후에는 append함수를 통해 Array에 Int 형 정수를 넣을수 있게 된다.

 

// 가지고 있는지 확인하는 함수
print(integers.contains(100)) // ture
print(integers.contains(99))  // false

contains() 함수는 추가한 Array에 해당 숫자가 있는지 확인하는 함수이다. 있을경우 true를, 없을 경우 false를 반환한다.

 

// 지우는 함수
integers.remove(at:0)
integers.removeLast()
integers.removeAll()
// 비어있는 상태에서 호출하면 에러
//intgers[0]

Array에서 지우는 함수도 존재한다. remove() 함수를 이용하거나, removeLast() 함수를 이용해 마지막에 있는 원소를 지우거나, removeAll() 함수를 사용해 현재 존재하는 모든 수를 지울 수도 있다.

 

마지막 줄에 다 지운 상태의 Array에서 integers[0]으로 호출을 할 경우, 비어있는 Array 내에서 호출 할 것이 존재하지 않아 에러가 발생하게 된다.

// 다양한 생성 방법
// Array<Double>와 [Double]는 동일한 표현
// 빈 Double Array 생성
var doubles: Array<Double> = [Double]()

// 빈 String Array 생성
var strings: [String] = [String]()

// 빈 Character Array 생성
// [] 는 새로운 빈 Array
var characters: [Character] = []

// let을 사용하여 Array를 선언하면 불변 Array
let immutableArray = [1,2,3]
// immutableArray.append(4)
// immutableArray.removeAll()

 

이외에 Array로 생성하는 방법은 다양하다. [Double]() 과 같은 모양으로 생성할 수 있고, 

String Array생성과 같이 타입 선언을 대괄호로 선언해도 되고, 아얘 타입 선언 후 , 대괄호만 붙여도 생성이 된다.

 

let을 사용하여 Array를 선언하면 변하지 않는 Array가 된다 (C++ 에서 const 를 붙인 격이다)

따라서 아래에 주석으로 처리한 것 처럼, 추가하거나 삭제하는 일은 불가능하다.

 

Dictionary

//Key가 String 타입이고 Value가 Any인 빈 Dictionary 생성
var anyDictionary: Dictionary<String, Any> = [String: Any]()
anyDictionary["someKey"] = "Value"
anyDictionary["anotherKey"] = 100

print(anyDictionary)
["someKey": "Value", "anotherKey": 100]

Dictionary는 Key와 Value로 이루어진 타입이다. 위 코드에서는 Key를 String 타입으로 선언, Value를 Any 타입으로 선언한 빈 Dictionary 를 생성했다. 그리고 각각 someKey의 value 를 추가 하고, 또 anotherKey, 100 을 추가 했다.

 

그리고 출력은 두개 다 됐다.

anyDictionary["someKey"] = "Dictionary"
print(anyDictionary)
// 출력
["someKey": "Dictionary", "anotherKey": 100]

이외에도 원래 들어있던 Key 의 Value 값을 변경할 수도 있고,

anyDictionary.removeValue(forKey: "anotherKey")
print(anyDictionary)
//출력
["someKey": "Dictionary"]

이렇게 원하는 Value를 삭제하는 것도 가능하다.

anyDictionary["someKey"] = nil
print(anyDictionary)
// 출력
[:]

그리고 nil을 이용해 남아있던 Key의 Value를 nil로 추가해주면, 모든게 없음 상태로 처리된다.

 

let emptyDictionary: [String: String] = [:]
let initalizedDictionary: [String: String] = ["name": "ITlearning", "gender": "male"]

 

 

이렇게 다양하게 생성을 할 수 있다.

//emptyDictionary["key"] = "value"
// 상수에 넣지도 못함 불확실성 때문에 오류가 난다.
// let someValue: String = initalizedDictionary["name"]

위 첫 주석에 코드는 존재하지 않는 Key에 접근하려고 하니 에러가 발생하고,

someValue에 name에 해당하는 Value를 복사하려 하지만, 불확실성 때문에 오류가 나게 된다.

 

Set

// MARK: - Set
// 빈 Int Set 생성
var integerSet: Set<Int> = Set<Int> ()

integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
// 이래도 같은 값은 한번만 추가 된다.

위와 같은 방법으로 빈 Set선언이 가능하고, insert() 함수를 이용해 원소를 넣을 수 있다.

하지만 같은 숫자가 여러번 들어가는 경우는 없고, 모두 다 다른 숫자만 들어간다. 위의 코드의 99가 3번 들어가게 되는데, 이 중 같은 값은 한번만 추가 된다.

print(integerSet)
print(integerSet.contains(1))
print(integerSet.contains(2))

integerSet.remove(100)
integerSet.removeFirst()

print(integerSet.count)

// 출력
[100, 99, 1]
true
false
1

print() 로 Set 본인을 출력하면 모든 수가 출력되고, contains() 함수를 이용해 해당 수가 존재하는지 확인할 수 있다.

이외에 remove, removeFirst() 함수들은 삭제를 해주는 함수이고, count 를 이용해 현재 존재하는 수의 개수를 확인 할 수 있다.

// 2. Set의 활용
// 멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용합니다.
let setA: Set<Int> = [1,2,3,4,5]
let setB: Set<Int> = [3,4,5,6,7]

// 합집합
let union: Set<Int> = setA.union(setB)
print(union)

// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion)

// 교집합
let intersection: Set<Int> = setA.intersection(setB)
print(intersection)

// 차집합
let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting)

// 출력
[2, 4, 5, 6, 7, 3, 1]
[1, 2, 3, 4, 5, 6, 7]
[5, 3, 4]
[2, 1]

Set으로 유용하게 사용할 수 있는 기능 중 하나는, 멤버의 유일성이 보장되기 때문에, 집합 연산에 활용하면 유용하다.

 

union() 함수를 사용하면 합집합, sorted() 함수를 사용하면 합집합의 오름차순 정렬, intersection() 함수를 사용하면 교집합, subtracting() 함수를 사용하면 차집합을 얻을 수 있다.

728x90

'etc > Swift' 카테고리의 다른 글

함수 고급  (0) 2021.05.16
함수 기본  (0) 2021.05.13
Any,AnyObject,nil  (0) 2021.05.05
Swift의 기본 데이터 타입  (0) 2021.05.04
상수와 변수(Swift)  (0) 2021.05.03

댓글

IT_learning's Commit