15. Collection

Cavok·2020년 9월 26일
0

* 정의

- 데이터 모음이다. 구조체로 구현이 되어 있는 값형식이며, 튜플과는 다르게 단일타입만 저장가능하다는 특성을 가지고 있다.

1. Array

- 배열은 동일한 타입을 나열한 형태를 가지고 있다. 순서대로 저장이 되기 때문에 올바른 인덱스를 이용만 한다면 원하는 위치에 접근할 수 있다.

1 - 1). Create

var list: [Int] = [1,2,3,4,5]
let list2: [Int] = [] // 배열 리터럴로 빈배열 생성
let emptyArray = [Int]() //생성자를 이용한 빈배열 생성

1 - 2). Read

list2[0] // 접근확인
list2.first // 접근확인 (배열의 첫번째 요소를 리턴)
list2.last // 접근확인 (베열의 마지막 요소를 리턴)
list.count //길이확인 (배열의 요소들의 총 갯수를 Int로 리턴)
list.contains(1) //요소확인 (파라미터로 전달된 값이 배열안에 있는지 확인하고 Bool로 리턴)

list.contains{ $0 % 2 == 0 } /* (파라미터로 배열의 요소를 받는) 클로져를 
파라미터로 받아서 그 요소의 일치여부를 Bool값으로 리턴)
배열의 요소를 아규먼트로 받고, 그 요소가 일치하는지 여부를 Bool값으로 리턴하는 클로져를 파라미터로 받는
메소드

1 - 3). Update

list.append(1) // 마지막 인덱스에 요소 추가(메소드)
list.append(contentsOf: 1...4) // 범위 또는 배열을 인자로 받는 파라미터가 있는 추가메소드
list.insert(0, at: 0) // 원하는 인덱스에 요소 추가(메소드)

list[6] = 6 // 원하는 인덱스에 요소 추가(서브스크립트) 
list.insert(contentsOf: 100..123 at: 3) // 원하는 인덱스에 여러요소(범위)를 추가 
범위를 Update 하는 것도 얼마든지 가능하다.
list[0...2] = [2] // 범위 교체 (서브스크립트)
list = [2,3,4,5,5]
list.replaceSubrange(1...4, with: [1])  // 범위 교체(메소드)

1 - 4). Delete

list.remove(at: 2) // 특정인덱스의 요소 제거.
list.removeAll() // 모든요소를 제거
list = [1,2,3,4,5,6,7,8,9,10]
list.removeAll{$0 % 2 != 0} // 특정조건에 해당되는 요소들을 제거
list.removeFirst() // 제거한 첫번째 요소를 리턴
list.removeFirst(_:)  // 첫번째 요소부터 제거할 요소의 수를 파라미터로 받는 메소드 
list.removeLast() // 제거한 마지막 요소를 리턴 
list.removeLast(_:) // 마지막 요소부터 제거할 요소의 수를 파라미터로 받는 메소드
list.popLast() // 마지막 요소를 삭제하고, 삭제 된 요소를 리턴 실패시 nil이 리턴

2. Dictionary

데이터들이 순서없이 나열이 되어 있는 컬렉션이다. 저장되는 값은 항상 Key:Value 형태로 저장되어야 하며 Value는 중복이 가능하지만, Key는 중복이 불가능하다.

2 - 1). Create

var dict: [String: Int] = [:] // 딕셔너리 리터럴로 빈 딕셔너리 생성
var dict = [String: Int]() // 생성자를 이용한 생성

//dict.sorted(by:) => 사용하지말아라 => 어차피 정렬안됨

2 - 2). Read

var dict: [String: Int] = ["A": 1,"B": 2]

dict["A"]  // '키'를 이용해서 '값'을 얻을 수 있다. 
dict.keys // '키' 만 배열로 얻을 수 있다.
dict.values // '값' 배열로 얻을 수 있다.
키를 통해서 값에 접근할 수 있다. 그러나 값은 중복이 될 수 있기 때문에 값을 통해서 키에 접근하는 것을 불가능하다.
딕셔너리의 접근값을 항상 옵셔널value로 얻어오게 된다

2 - 3). Update

dict["A"] = 123
dict.updateValue("456", forKey: "A") /* 이미 "A" key 가 있다면 값을 바꿔주고,
"A"key 가 없었다면 새로운 key, value 쌍이 추가된다. 
Key에 접근하여 다른 값을 저장해주는 것으로 쉽게 바꿀 수 있다. 그러나 .updateValue 메소드를 사용하여 다른 값으로 바꿔주는 방법도 있다.

2 - 4). Delete

dict.removeAll() 
dict.removeValue(forKey: "A")  키를 통해 키와 값을 제거하는 메소드이며, 키가 존재하지 않는다면
nil 을 리턴한다. 
dict["A"] = nil  // 특정 키에 nil을 저장하면 삭제된다
dict.popFirst() // 첫번째 키 와 값을 제거한다.
딕셔너리에서 키에 nil을 저장하는 것은 해당 요소를 삭제한다는 뜻이다.

3.Set

- Set는 데이터들이 순서없이 저장되어 있는 형태의 컬렉션이다. Set는 동일한 데이터를 한 번만 저장한다. 타입 추론이 불가능하기 때문에 항상 타입을 명시해줘야 한다.

var array = [1,1,1,2,3,4,5,6,7,8,9,10] // Array
var set: Set = [1,1,1,2,3,4,5,6,7,8,9,10] // Set

3 - 1). Create

var set = Set<Int>()
var set: Set<Int> = []

3 - 2). Read

set[0]
set.contains(3)
set.contains(22)

3 - 3). Update

set.insert(3)
set.insert(333333)
Set는 append 메소드가 존재하지 않는다. 다만 insert 메소드를 사용하여 튜플형태로 return 해주는 것은 가능하다,

3 - 4). Delete

set.remove(3)
set.removeAll() 
Set는 집합 연산을 제공한다.
//합집합
a.union(b)

//교집함
a.intersection(b)

//차집합
a.subtracting(b)
// a집합에서 b집합을 뺀값
//여집합

a.symmetricDifference(b)
//// 둘의 합집합에서 교집합을 뺀 값
// a.union(b) - a.intersection(b)

//서로소
a.isDisjoint(with: b)
// 두집합 사이의 공통값이 하나도 없다면 true , 하나라도 있다면 false

0개의 댓글