2.6 Collections

Joohyun·2022년 4월 7일
0

Arrays

  • 같은 타입의 값들이 순서대로 정렬되어 있는 리스트
[value1, value2, value3]

생성

1. 빈 Array 생성

// 가장 일반적인 방법
var myArray: [Int] = []

// special collection type annotation 사용 
var myArray: Array<Int> = []

// initialize 사용
var myArray = [Int]()

2. 타입 명시

var names: [Strings] = ["Anne", "Gary", "Keith"]

3. 타입 추론

var names = ["Anne", "Gary", "Keith"]

4. 같은 값이 여러개 들어있는 Array 생성

  • array initializer를 이용해 같은 값이 여러개 들어있는 array 생성이 가능하다.
// myArray = [0, 0, 0, ... , 0] 총 길이 100
var myArray = [Int](repeating: 0, count: 100)

접근

1. subscript syntax

  • array의 index를 통해 해당 위치의 값에 접근 (0 <= index < arr.count)
var name = ["Amy", "Keith"]
let firstName = names[0] "Amy"

2. contains(_:)

  • Array에 특정 값이 존재하면 true, 존재하지 않으면 false를 반환한다.
let numbers = [4, 5, 6]

if numbers.contains(5) { // true
  	print(There is a 5)
}

길이

1. count

  • array의 길이를 반환해주는 property
let count = myArray.count

2. isEmpty

  • array의 길이가 0이면 true, 0보다 크다면 false를 반환
if myArray.isEmpty { }

추가

1. append(_:)

  • array의 맨 끝에 새로운 값을 1개 추가한다.
var name = ["Amy"]
names.append("Joe") // ["Amy", "Joe"]

2. +=

  • array의 맨 끝에 새로운 값 여러개를 한번에 추가할 수 있다.
var name = ["Amy"]
names += ["Keith", "Jane"] // ["Amy", "Keith", "Jane"]

3. insert(_:at:)

  • array의 특정 index에 새로운 값을 삽입한다. (0 <= index < arr.count)
var name = ["Amy"]
names.insert("Bob", at: 0) // ["Bob", "Amy"]

수정

1. subscript syntax

  • array의 index를 통해 해당 위치의 값 수정 (0 <= index < arr.count)
var name = ["Amy", "Keith"]
names[1] = "Paul" // ["Amy", "Paul"]

삭제

1. remove(at:)

  • array의 특정 index에 위치한 값을 삭제한다.
  • 삭제한 값을 반환한다.
var names = [Amy,Brad,Chelsea,Dan]
let chelsea = names.remove(at: 2) // "Chelsea", ["Amy", "Brad", "Dan"]

2. removeLast()

  • array의 마지막 값을 삭제한다.
  • 삭제한 값을 반환한다.
var names = [Amy,Brad,Chelsea,Dan]
let dan = names.removeLast() // "Dan", ["Amy", "Brad", "Chelsea"]

3. removeAll()

  • array에 들어있는 모든 값을 삭제한다.
var names = [Amy,Brad,Chelsea,Dan]
names.removeAll() // []

Array + Array

  • 같은 타입의 Array끼리 더해 새로운 Array를 생성할 수 있다.
let array1 = [1, 2, 3]
let array2 = [4, 5, 6]
let array = array1 + array2 // [1, 2, 3, 4, 5, 6]

Array 내부에 Array

let array1 = [1,2,3]
let array2 = [4,5,6]
let containerArray = [array1, array2] // [ [1,2,3], [4,5,6] ]
let firstArray = containerArray[0]  // [1,2,3]
let firstElement = containerArray[0][0] // 1

Dictionaries

  • key와 value로 이루어져 있고 순서가 존재하지 않는다.
  • key는 중복되지 않고 고유해야 한다.
  • 원하는 key의 value를 빠르게 검색할 수 있다.
[key1: value1, key2: value2, key3: value3]

생성

1. 빈 Dictionary 생성

// 가장 일반적인 방법
var myDictionary: [String: Int] = [:]
 
// special collection type annotation 사용 
var myDictionary = Dictionary<String, Int>()

// initialize 사용
var myDictionary = [String: Int]()

2. 타입 추론

// [String: Int]
var scores = [Richard: 500,Luke: 400,Cheryl: 800]

접근

1. subscript syntax

  • 특정 key를 통해 해당 값에 접근
  • 해당 key가 존재하지 않으면 nil을 반환
var scores = [Richard: 500,Luke: 400,Cheryl: 800]

if let lukesScore = scores[Luke] {
  print(lukesScore) // 400
}
var scores = [Richard: 500,Luke: 400,Cheryl: 800]

// scores에 "Henry"가 존재하지 않으므로 내부 코드 실행 안됨
if let henrysScore = scores[Henry] {
  print(henrysScore) 
}

2. keys

  • dictionary의 key값들을 모은 리스트 반환
  • 해당 값을 사용하기 위해선 array로 변경해아함
var scores = [Richard: 500,Luke: 400,Cheryl: 800]
let players = Array(scores.keys) // [”Richard”, “Luke”, “Cheryl”]

3. values

  • dictionary의 value값들을 모은 리스트 반환
  • 해당 값을 사용하기 위해선 array로 변경해아함
var scores = [Richard: 500,Luke: 400,Cheryl: 800]
let players = Array(scores.values) // [500, 400, 800]

추가, 수정

1. subscript syntax

  • 특정 key를 통해 값에 접근
  • 해당 key가 존재하면 value을 수정하고, 존재하지 않으면 해당 key와 value를 추가한다.
// 추가
var scores = [Richard: 500,Luke: 400,Cheryl: 800]
scores["Oli"] = 399 // [”Richard”: 500, “Luke”: 400, “Cheryl”: 800, "Oli": 399]
// 수정
var scores = [Richard: 500,Luke: 400, "Oli": 200]
scores["Oli"] = 399 // [”Richard”: 500, “Luke”: 400, "Oli": 399]

2. updateValue(_:, forKey:)

  • 해당 key가 존재할 때에만 해당 key의 value를 수정하고, 이전 value를 반환
  • 해당 key가 존재하지 않으면 nil을 반환
var scores = [Richard: 500,Luke: 400,Cheryl: 800]
let oldValue = scores.updateValue(100, forKey:Richard) // 500
print(scores) // [”Richard”: 100, “Luke”: 400, “Cheryl”: 800]
// if - let을 통해 해당 key가 존재할 때에만 print
if let oldValue = scores.updateValue(100, forKey:Richard) {
  print(Richard’s old value was \(oldValue))
}

삭제

1. subscript syntax

  • 특정 key를 통해 접근하여 해당 value를 nil로 변경
var scores = [Richard: 100,Luke: 400,Cheryl: 800]
scores[Richard] = nil // [”Luke”: 400, “Cheryl”: 800]

2. removeValue(forKey:)

  • 특정 key가 존재한다면 해당 key, value를 삭제
  • 삭제한 value 값을 반환
if let removedValue = scores.removeValue(forKey:Luke) {
  print(Luke’s score was \(removedValue) before he stopped 
  playing”)
}
profile
Developer

0개의 댓글