본문 바로가기

ComputerScience/ios App(Storyboard)

ios - 8 swift 기본문법(Array, Dictionary, Set)

728x90

1 Collection?

- 여러 변수를 담을 수 있는 컨테이너

- Array, Dictionary, Set등이 있다.

2 Array

- 동일한 타입의 여러 변수를 저장할 수 있는 컨테이너

- 정의

var evenNumbers: [Int] = [2, 4, 6, 8]
var oddNumbers: Array<Int> = [1, 3, 5, 7]

- append

evenNumbers.append(10)
evenNumbers.append(contentsOf: [12, 14])

oddNumbers += [9, 11, 13]

- empty check

let isEmpty = evenNumbers.isEmpty

- count

let numOfElems = evenNumbers.count

- 원소 접근 first, last, min, max

evenNumbers.first
oddNumbers.last

evenNumbers[3]
evenNumbers[100]

- evenNumbers[100]에서 인덱스 범위를 벗어나면 에러가 난다.

let emptyArray: [Int] = []
emptyArray.first

// compare
evenNumbers.min()
evenNumbers.max()

- first, last를 했는데 배열이 비어있을 수 있다. 따라서 반환형은 optional이고 적절한 상황에서 옵셔널 바인딩이 필요하다.

- min, max는 elements간의 비교연산이 가능한 경우 최소 최대 값을 반환해 준다. 마찬가지로 최소, 최대값이 없을 수 있는 경우를 대비해 타입은 optional이다.

- range

var evenNumbers: [Int] = [2, 4, 6, 8]

let threeEvenNumsFromStart = evenNumbers[0...2]
evenNumbers[0] = -2
evenNumbers[0...2] = [10, 12, 14]
evenNumbers

- drop

var evenNumbers: [Int] = [2, 4, 6, 8]

evenNumbers.dropFirst(2)
evenNumbers

 

- dropfirst는 배열의 시작점으로부터 n개의 원소를 뺀 나머지를 배열로 반환하는 함수이다.

- 원본 배열에서 원소를 삭제하는 것이 아니라 뺀 나머지를 가져오는 것이다.

- 같은 방식으로 dropLast를 사용할 수 도 있다.

- prefix, suffix

- drop과는 반대로 앞의 n번째 원소를 배열로 반환하거나 뒤의 n원소를 반환하는 방법도 있다.

- 마찬가지로 원본 배열에 변화를 일으키지 않는다.

var evenNumbers: [Int] = [2, 4, 6, 8]

evenNumbers.prefix(2)
evenNumbers

evenNumbers.suffix(2)
evenNumbers

- contains

evenNumbers.contains(3)

- 특정 index에 삽입/제거

evenNumbers.insert(40, at: 3)
evenNumbers.remove(at: 0)

- swapAt

evenNumbers.swapAt(0, 3)

- iterate

var evenNumbers: [Int] = [2, 4, 6, 8]

for num in evenNumbers {
    print(num)
}

for (index, num) in evenNumbers.enumerated() {
    print("idx: \(index) value: \(num)")
}

- enumerated()를 사용하면 배열의 value뿐 아니라 Index도 가져올 수 있다.

3. Dictionary

- 유니크한 key와 value의 짝을 여려개 저장할 수 있는 컨테이너

- 순서가 따로 없음

- 정의

var score: [String: Int] = ["A": 90, "B": 70, "C": 30]
var score2: Dictionary<String, Int> = ["A": 90, "B": 70, "C": 30]

- isEmpty, count

score.isEmpty
score.count

- value 접근/삽입/제거

score["A"]
score["D"]

- key가 없는 경우 nil이 나온다. 따라서 적절한 상황에서 옵셔널 바인딩이 필요할 수 있다.

score["A"] = 100
score["D"] = 30
score["D"] = nil
score

- 새로운 key에 value를 초기화 해주면 dictionary에 추가된다.

- 해당 key의 value를 nil로 초기화 하면 dictionary에서 사라진다.

for (name, score) in score {
    print("\(name) \(score)")
}

for (key) in score.keys {
    print(key)
}

- 이렇게 for loop를 통해 dictionary의 원소들을 접근할 수 있다.

4. Set

- 순서가 없고 겹치는 값이 없는 컨테이너, 모든 elements들은 유니크하다.

var someSet: Set<Int> = [1, 2, 3, 1]

someSet.isEmpty
someSet.count
someSet.contains(1)

someSet.insert(5)
someSet.remove(2)

728x90
반응형