일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- actionSheet
- 회고
- 내_삶
- AnyObject
- On branch is up to date with ' '
- 코드스니펫
- 바이트디그리
- ios 개발 강의
- SWIFT
- weekly calendar
- 글또
- Git
- 생명주기
- class
- uikit
- 연관값
- struct
- error해결
- MyLife
- Switch
- copy-on-write
- avaliable
- 주간 달력
- 파스칼표기법
- 제어전송문
- 다짐글
- unrecognized selector sent to class
- K디지털기초역량훈련
- 글또9기
- IOS
- Today
- Total
seong_hye, the developer
Swift) 문법 정리 - 컬렉션 타입 (Collection) 본문
코드를 쓰다보면 수많은 데이터를 만나게 되고
그 데이터를 하나하나 각자 다 만들어 사용할 수는 없게 되겠죠?
데이터를 효율적으로 관리하기 위한 자료형이 필요한데요
이럴 때 사용하기 위한 것이 바로 컬렉션 타입이에요.
컬렉션 타입이란?
스위프트에서 사용하는 여러 개의 데이터를 한꺼번에 다루는 바구니 타입
예로 인스타그램 게시글, 블로그 글들과 같이 많은 데이터를 다루기 위해 필요한 타입
이런 컬렉션은 3가지가 존재함
Array
데이터 값들을 순서대로 저장하는 컬렉션
대괄호([ ])로 묶음 / 각각의 데이터는 요소(index)라고 지칭
규칙
- 배열의 인덱스는 0부터 자동으로 순서가 지정됨
- (순서가 있기 때문에) 배열의 데이터는 중복 가능
- 한 개의 배열에는 동일한 데이터 타입만 담을 수 있음
사용하는 경우
가장 많이 사용하는 컬렉션으로 실제 프로젝트에서 대부분의 경우
// 빈 배열 생성
let emptyArray1: [Int] = [] // 항상 타입을 작성해야 함
let emptyArray2 = Array<Int>() // 생성자를 활용해 생성
let emptyArray3 = [Int]()
let array = [1,2,3,4,5]
//기본 기능
array.count // 5 -> 요소의 갯수를 셈
array.isEmpty // false -> 요소의 비어있음을 확인
array.contains(5) // true -> 요소가 존재함을 확인
array.randomElement() // 3 -> 해당 배열의 랜덤 요소를 가져옴
array.swapAt(0,1) // [2,1,3,4,5] -> 0번과 1번의 요소 위치를 바꿈
//요소의 접근
array[0] // 1 -> 0번째 배열에 접근
array.first //Optional(1) -> 옵셔널로 첫번째 요소 가져옴
array.last //Optional(5) -> 옵셔널로 마지막 요소 가져옴
array.startIndex // 0 -> 첫번쨰 인덱스 위치 가져옴
array.endIndex // 5 -> 마지막 인덱스 위치 가져옴(메모리 끝의 주소)
array.fistIndex(of:2) // 1 -> 앞에서부터 해당 요소가 앞에서 몇번쨰인지(옵셔널타입)
array.endIndex(of:3) // 2 -> 뒤에서부터 해당 요소가 앞에서 몇번째인지(옵셔널타입)
// 삽입
array.insert(3, at:4) //[1,2,3,4,3,5] -> 새로운 요소를 해당 위치에 삽입
array.insert(contentsOf:[6,7,8], at:5)
// [1,2,3,4,5,6,7,8] 새로운 배열을 배열에 추가
//교체
array[3]= 3 // [1,2,3,3,5] -> 서브 스크립트 문법 활용
array.replaceSubrange(0..2, with: [5,6,7]
// [5,6,7,4,5] -> 인덱스 위치에 원하는 요소로 교체
//추가
array += [6] //[1,2,3,4,5,6]
array.append(6) //[1,2,3,4,5,6]
// 삭제
array[0...2] = [] //[4,5]
array.remove(at:2) //[1,3,4,5]
array.removeAll() // []
//기타
array.sort() // 자체 정렬
array.sorted() // 정렬된 배열 반환
array.reverse() // 자체 역순정렬
array.reversed() // 역순 정렬된 배열 반환
Dictionary
데이터를 키와 값으로 하나의 쌍으로 만들어 관리하는 순서가 없는 컬렉션
대괄호로 묶음 ([ ]), 각 요소의 키와 값의 쌍을 콜론(:)으로 처리
규칙
- 키 값은 유일해야 함, 밸류값은 중복 가능
- 동일한 타입 쌍의 데이터만 담을 수 있음 ex) [Int:String], [Int:Int]
- 딕셔너리의 값에 딕셔너리 또는 배열을 사용하여서 중첩적으로 사용도 가능
- 딕셔너리의 키 값은 Hashable해야함
*Hashable: 해시함수를 사용해 유일한 값으로 변환이 가능한 티입인지의 여부를 묻는 것
*해쉬 함수: 고정된 길이의 숫자 또는 글자이면서 유일한 값을 반환하는 함수
[ 값의 유일성 보장 / 검색 속도의 빠름]
사용하는 경우
서버에 저장되어 있는 데이터를 받아올 때 사용됨
// 빈 배열 생성
let emptyDic1: Dictionary<Int,String> = [:]
let emptyDic2 = Dictionary<Int,String>()
let emptyDic3 = [Int: String]()
let dic = ["1":1, "2":2]
//기본 기능
dic.count // 2 -> 요소의 갯수를 셈
dic.isEmpty // false -> 요소의 비어있음을 확인
dic.randomElement() // (key "1",value 1) -> 네임드 튜플 형태로 반환
//요소의 접근
dic["1"] // Optional(1) -> 옵셔널로 값 반환
// 키/ 값들
dic.keys // 컬렉션으로 반환
dic.values
dic.keys.sorted() // 배열로 반환
dic.values.sorted()
//업데이트 - 삽입/교체/추가
dic["3"] = 3 //동일 키가 있으면 수정, 없으면 추가
dic.updateValue(5, forKey: "2")
// 삭제
dic["2"] = nil
dic.removeValue(forKey: "1)
dic.removeAll()
Set
수학에서의 집합과 비슷한 연산을 제공하는, 순서가 없는 컬렉션
대괄호([ ])로 묶음 / (배열과 구분이 안되기 때문에) 반드시 생성시 타입 선언을 해야 함
규칙
- 생성시 타입 선언을 해야함
- 요소 값을 중복으로 넣어도 집합의 의미상 요소 중복 저장안됨
(각 요소는 유일한 값 - Hashable)
사용하는 경우
내부적으로 값의 검색에 Hashing 알고리즘을 사용하므로
정렬순서보다 검색속도가 중요한 경우에 사용
또는 유일하면서 집합의 수학적인 개념을 이용할 필요가 있을 때
여러 데이터를 중복 저장할 필요가 없는 경우
// 빈 배열의 경우
let emptySet1: Set<Int> = []
let emptySet2 = Set<Int>()
let set: Set = [1,2,3,4,5]
let set2: Set = [3,4,5]
//기본
set.count
set.isEmpty
set.contains(3)
set.randomElement()
//업데이트 - 삽입/교체/추가
set.update(with:3)
//삭제
set.remove(2)
set.removeAll()
//부분집합/상위집합/서로소
set2.isSubset(of:set) //부분집합 여부
set2.isStrictSubset(of:set) //진부분집합 여부
set.isSuperset(of:set2) //상위집합 여부
set23.isStrictSuperset(of: set) //진상위집합 여부
//합집합
set.union(set2) //합집합 리턴
set.formUnion(set2) //원래 Set을 변경
//교집합
set.intersection(set2) //교집합
set.formIntersection(set2) //원래 Set을변경
//차집합
set.subtracting(set2) //차집합
set.subtract(set2) //원래 Set을변경
//대칭차집합
set2.symmetricDifference(set) //대칭차집합 리턴
set2.formSymmetricDifference(set) //원래 Set을 변경
참고자료)
'IOS' 카테고리의 다른 글
Swift) 문법 정리 - 반복문 (0) | 2022.07.12 |
---|---|
Swift) 문법 정리 - 조건문 (0) | 2022.07.12 |
Swift) 문법 정리 - 함수 (0) | 2022.07.12 |
Swift ) 문법정리 - 데이터 타입 (0) | 2022.07.12 |
Swift) 문법 정리 - 변수와 상수 (0) | 2022.07.12 |