Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스레드
- 컴퓨터구조
- 야곰아카데미
- API
- 앱개발
- 폴링
- 스풀
- 캐시
- kernel
- 부트캠프
- Components
- 멀티스레드
- 버퍼
- 커널
- 폰노이만구조
- 프로세스
- 계층형 구조 커널
- 하버드구조
- closure
- 코딩
- bus
- 마이크로 커널
- IODevice
- Swift
- 단일형 구조 커널
- sdk
- 운영체제
- 폰노이만
- 멀티프로세스
- 인터럽트
Archives
- Today
- Total
생각, 고민, 문제해결의 기록
[iOS/Swift] 컬렉션 타입(Collection Type) 본문
컬렉션 타입?
데이터를 묶어서 저장하고 관리할 수 있는 기능을 제공
대표적으로 Array, Dictionary, Set, Tuple 등이 있다.
Array (배열)
같은 타입의 데이터를 나열한 후 순서대로 저장하는 형태의 컬렉션 타입.
중복 값을 허용하고 각 요소마다 인덱스를 통해 접근할 수 있다.
잘못된 인덱스로 접근하려고하면 Exception Error가 발생한다.
ar names: [String] = ["Toby", "smith", "mark", "adam"] // 배열 선언
print(names[2]) // 인덱스로 확인 "mark"
// print(names[4]) // 인덱스 범위 밖이라 오류 발생
names.append("elsa") // 배열 끝에 값 저장
names.append(contentsOf: ["max", "john"]) // 여러 값 저장
names.insert("corin", at: 0) // 지정 인덱스에 값 저장
names.insert(contentsOf: ["zini", "cona"], at: 3) // 지정 인덱스에 여러 값 저장
print(names[6]) // "adam"
names.firstIndex(of: "vill") // 배열의 앞에서부터 조회해서 해당하는 값의 인덱스를 반환
names.lastIndex(of: "vill") // 배열의 뒤에서부터 조회해서 해당하는 값의 인덱스를 반환
names.first // 첫번째 인덱스 값 반환
names.last // 마지막 인덱스 값 반환
print(names)
// ["corin", "Toby", "smith", "zini", "cona", "mark", "adam", "elsa", "max", "john"]
names.removeFirst() // 첫번째 인덱스 값 삭제
names.removeLast() // 마지막 인덱스 값 삭제
print(names) // ["Toby", "smith", "zini", "cona", "mark", "adam", "elsa", "max"]
Dictionary (딕셔너리)
요소들이 순서 없이 key와 value의 쌍으로 구성되는 컬렉션 타입.
항상 [key:value]의 형태를 띄고 각 key마다의 value값은 중복될 수 있지만
key값은 중복해서 사용할 수 없다.
내부에 존재하지 않는 key로 접근해도 오류가 발생하지 않고 nil값을 반환한다.
var numberForName: [String:Int] = [:] // 빈 딕셔너리 선언
typealias StringIntDict = [String:Int] // 타입별칭으로 딕셔너리형태에 이름 부여 가능
// var numberForName: StringIntDict = StringIntDict() // 타입별칭으로 선언
var ageInfo: [String:Int] = ["Toby":27, "robert":33] // 초깃값 저장 후 생성
ageInfo["Toby"] // 27
ageInfo["king"] // nil
ageInfo.removeValue(forKey: "robert") // 해당 key값 삭제
ageInfo.removeValue(forKey: "robert") // 이미 삭제된 value라 nil 반환
print(ageInfo) // ["Toby": 27]
ageInfo["max"] = 99 // max라는 key로 value 추가
print(ageInfo) // ["max": 99, "Toby": 27]
Set (세트)
같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입.
중복값이 존재하지 않기 때문에 보통 순서가 중요하지 않거나 각 요소가 유일한 값이어야하는 경우에 사용된다.
세트의 요소로는 hashable한 값이 들어와야 한다.
var emptySet: Set<String> = [] // 빈 세트 생성
var setNames: Set<String> = ["AA", "BB", "CC", "AA"] // 대괄호로 값 추가
setNames.count // 중복 값 불가라서 3
var nums = [100, 200, 300]
// Array와 선언방식이 동일하기 때문에 타입추론을 사용하게 되면 컴파일러는 Set이 아닌 Array타입으로 생성한다
setNames.insert("DD") // 값 추가
setNames.remove("AA") // 값 제거
print(setNames) // ["CC", "BB", "DD"] // 순서가 없기 때문에 컴파일할 때마다 임의로 순서가 바뀜
세트는 내부의 값들이 모두 유일한 값이므로 집합관계를 표현하고자 할때 매우 용이하다.
let abc: Set<String> = ["AA", "BB", "CC"]
let cde: Set<String> = ["CC", "DD", "EE"]
// 교집합
let intersectSet: Set<String> = abc.intersection(cde) // {"CC"}
// 여집합
let symmetricDiffSet: Set<String> = abc.symmetricDifference(cde) // {"BB", "EE", "AA", "DD"}
// 합집합
let unionSet: Set<String> = abc.union(cde) // {"BB", "AA", "CC", "EE", "DD"}
// 차집합
let subtractSet: Set<String> = abc.subtracting(cde) // {"BB", "AA"}
// 정렬된 형태로 반환
unionSet.sorted() // ["AA", "BB", "CC", "DD", "EE"]
세트를 활용해 포함관계도 연산할 수 있다.
let bird: Set<String> = ["chicken", "eagle", "pigeon"]
let animal: Set<String> = ["tiger", "bear", "lion"]
let unionAnimal: Set<String> = bird.union(animal) // 합집합
print(unionAnimal) // ["lion", "pigeon", "bear", "tiger", "eagle", "chicken"]
bird.isDisjoint(with: animal) // 공통되는 요소가 있는지? true
bird.isSubset(of: unionAnimal) // bird가 unionAnimal의 부분집합인지? true
unionAnimal.isSubset(of: animal) // unionAnimal은 animal의 전체집합인지? true
'iOS > Swift' 카테고리의 다른 글
[iOS/Swift] 연산자(Operators) (0) | 2022.10.24 |
---|---|
[iOS/Swift] 클로저(Closures) (0) | 2022.10.11 |
[iOS/Swift] 구조체(Struct)와 클래스(Class) (0) | 2022.08.14 |