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
- 연산자
- 문자열 붙여서 출력하기
- 프로그래머스 n번째 원소까지
- Til
- cocoapods 설치 오류
- continue
- 프로그래머스 암호 해독
- 조건에 맞게 수열 변경하기 3
- 프로그래머스
- 스파르타코딩캠프
- 배열 만들기1
- 프로그래머스 자동커밋
- 문자열 정렬하기 (1)
- 프로그래머스 최댓값 만들기(2)
- Break
- Error installing cocoapods
- 스페인어
- 프로그래머스 주사위 게임1
- swift
- 객체지향
- 프로그래머스 조건에 맞게 수열 변경하기 3
- ruby설치
- 프로그래머스 문자열 정렬하기 (1)
- 프로그래머스 배열 만들기1
- n번째 원소까지
- 프로그래머스 문자열 붙여서 출력하기
- 주사위 게임1
- array
- 프로그래머스 n의 배수 고르기
- 스파르타 코딩클럽 내일배움캠프
Archives
- Today
- Total
dev._.note
[Swift] Array와 Set, Dictionary 본문
📌 Array
Array의 특징
- 배열(Array)은 동일한 타입의 요소들을 저장하는 순서가 있는 컬렉션. 배열은 특정 요소의 인덱스를 사용하여 접근하고 수정할 수 있으며, 배열의 크기는 동적으로 조절.
- 인덱스(index)는 0 부터 시작.
- 처음에 선언할 때(초기화할 때) 배열의 길이를 미리 지정하지 않아도됨
- 자주 사용하는 메서드
// 배열 생성하기
// 1. 타입 추론으로 생성하기
var array1 = [1, 2, 3]
var array2 = [] // error! 타입 추론으론 빈 배열 생성 불가
// 2. 타입 Annotation으로 생성하기
var array3: [Int] = [1, 2, 3]
var array4: [Int] = [] //빈 배열 생성
// 3. 생성자로 생성하기
var array5 = Array<Int>()
var array6 = [Int]()
var array7 = [Int](repeating: 0, count: 10) //생성과 동시에 10개 Element 생성 및 0으로 초기화
// 배열 갯수 확인하기
var array1 = [1, 2, 3]
let count: Int = array1.count // 배열 갯수 확인 : 3
let isEmpty: Bool = array1.isEmpty // 배열 비었는지 확인 : false
// 배열 요소에 접근하기
var array1 = [1, 2, 3]
// 1. Subscript로 접근하기
array1[0] // 1
array1[1] // 2
// 2. 범위로 접근하기
array1[0...1] // [1, 2]
// 3. 속성으로 접근하기
array1.first // Optional(1)
array1.last // Optional(3)
// 배열에 요소 추가하기
// 1. append : 끝에 추가
var array1 = [1, 2, 3]
array1.append(4) // [1, 2, 3, 4]
array1.append(contentsOf: [5, 6, 7]) // [1, 2, 3, 4, 5, 6, 7]
// 2. inset : 중간에 추가
var array2 = [1, 2, 3]
array2.insert(0, at: 0) // [0, 1, 2, 3]
array2.insert(contentsOf: [10, 100], at: 2) // [0, 1, 10, 100, 2, 3 ]
// 배열에 요소 변경하기
// 1. Subscript로 변경하기
var array1 = [1, 2, 3]
array1[0] = 10 // [10, 2, 3]
array1[0...2] = [10, 20, 30] // [10, 20, 30]
array1[0...2] = [0] // [0]
array1[0..<1] = [] // []
// 2. replaceSubrange로 바꾸기 (범위 변경 시)
var array2 = [1, 2, 3]
array2.replaceSubrange(0...2, with: [10, 20, 30]) // [10, 20, 30]
array2.replaceSubrange(0...2, with: [0]) // [0]
array2.replaceSubrange(0..<1, with: []) // []
// 배열에 요소 삭제
// 1. 일반적인 삭제하기
var array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array1.remove(at: 2) // [1, 2, 4, 5, 6, 7, 8, 9]
array1.removeFirst() // [2, 4, 5, 6, 7, 8, 9]
array1.removeFirst(2) // [5, 6, 7, 8, 9]
array1.removeLast() // [5, 6, 7, 8]
array1.popLast() // [5, 6, 7]
array1.removeLast(2) // [5]
array1.removeAll() // []
// 2. 특정 범위 삭제하기
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array2.removeSubrange(1...3) // [1, 5, 6, 7, 8, 9]
array2[0..<2] = [] // [6, 7, 8, 9]
// 배열 비교하기
var array1 = [1, 2, 3]
var array2 = [1, 2, 3]
var array3 = [1, 2, 3, 4, 5,]
array1 == array2 //true
array1.elementsEqual(array3) //false
// 배열 정렬하기
let array1 = [1, 5, 3, 8, 6, 10, 14]
// 1. sort : 배열을 직접 "오름차순"으로 정렬
array1.sort() // [1, 3, 5, 6, 8, 10, 14]
// 1-1. sort + 클로저 : 배열을 직접 "내림차순"으로 정렬
array1.sort(by: >) // [14, 10, 8, 6, 5, 3, 1]
// 2. sorted : 원본은 그대로 두고, "오름차순"으로 정렬된 새로운 배열을 만들어 리턴
let sortedArray = array1.sorted() // [1, 3, 5, 6, 8, 10, 14]
// 2-1. sorted + 클로저 : 원본은 그대로 두고, "내림차순"으로 정렬된 새로운 배열을 만들어 리턴
let sortedArray2 = array1.sorted(by: >) // [14, 10, 8, 6, 5, 3, 1]
📌 set
- Set는 순서를 정의하지 않고 동일한 타입의 값을 저장.
- 항목의 순서가 중요하지 않거나 항목이 한 번만 표시되도록 해야 하는 경우 배열 대신 집합을 사용.
- 세트 안에 있는 모든 값은 고유(unique)해야하므로 중복을 비허용.
var letters = Set<String>()
// 값 넣기
letters.insert("Classical Music")
// 초기화
letters = []
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
favoriteGenres.isEmpty // false
favoriteGenres.count // 3
favoriteGenres.contains("Rock") // true
favoriteGenres.randomElement() // Hip hop (다른 element가 나올 수 있음)
// 업데이트(update) - 삽입, 교체, 추가
// 배열에서 사용하는 append가 없음
var set1: Set<Int> = [1,1,2,2,3,3]
set1.update(with: 1) // 1 -> 기존에 있던 요소이므로 값을 옵셔널 타입으로 리턴
set1.update(with: 7) // nil -> 기존에 없던 요소이므로 Set에 요소가 추가되고 nil 리턴
set1.remove(1) // 1 -> 삭제된 요소를 리턴
set1 // [2,3,7]
set1.remove(5) // nil -> 존재하지 않는 요소를 삭제했을 때 에러는 발생하지 않고 nil 리턴
// 전체요소 삭제
set1.removeAll()
set1.removeAll(keepingCapacity: true) // 요소는 제거하지만 메모리는 제거하지 않는다
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
// 합집합
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// 교집합
oddDigits.intersection(evenDigits).sorted()
// []
// 차집합
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
// 대칭 차집합
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
📌 Dictionary
- Dictionary는 순서를 정의하지 않고 같은 타입의 key와 같은 타입의 value를 저장.
- key는 중복될 수 없음.
- 모든 key는 같은 타입.
- 모든 value는 같은 타입.
- key와 value는 다른 타입이어도 됨.
- 실물 사전을 찾는 것처럼 순서가 아닌 식별자 기준으로 값을 찾을 때 Dictionary를 사용.
var namesOfIntegers: [Int: String] = [:]
namesOfIntegers[16] = "sixteen" // 16은 subscript가 아니라 "키"임
// 초기화
namesOfIntegers = [:]
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
airports.keys // ["YYZ", "DUB"]
airports.values // ["Toronto Pearson", "Dublin"]
airports.keys.sorted() // ["DUB", "YYZ"]
airports.values.sorted() // ["Dublin", "Toronto Pearson"]
airports["APL"] = "Apple International"
// airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin", "APL": "Apple International"]
// key에 매칭된 value 값 초기화
airports["APL"] = nil
// 딕셔너리 airports에 있는 값의 수
print(airports.count)
// 출력값: 2
// 딕셔너리 airports에 있는 모든 key들
print(airports.keys)
// ["YYZ", "DUB"]
// 해당 key가 있다면 value를 덮어쓰고, 덮어쓰기 전 기존값울 반환
let newYyz = airports.updateValue("Hello YYZ", forKey: "YYZ")
print(newYyz) // 출력값: Optional("Toronto Pearson")
print(airports["YYZ"]) // 출력값: Optional("Hello YYZ")
// 해당 key가 없다면 그 key에 해당하는 value에 값을 추가하고 nil을 반환
let newApl = airports.updateValue("Hello APL", forKey: "APL")
print(newApl) // 출력값: nil
print(airports["APL"]) // 출력값: Optional("Hello APL")
'Dev > SWIFT' 카테고리의 다른 글
[Swift] radix (0) | 2023.11.29 |
---|---|
[Swift] 객체지향(OOP/Object-Oriented-Programming) (0) | 2023.11.29 |
[Swift] Queue와 Stack (0) | 2023.11.29 |
[Swift] 연산자, 조건문과 반복문 (1) | 2023.11.28 |
[Swift] 데이터 타입 (0) | 2023.11.28 |