본문 바로가기
공부/Swift, algorithm

[Swift] Hashable, Set, Dictionary

by 마자용 2022. 4. 26.

Hashable

  • 프로토콜이다. → 구조체, 열거형, String, Int, Float, Bool, Set 등에서 기본적으로 제공된다.
  • 사용자 정의 타입에서 채택만 하면 → Set에 들어갈 수 있는 타입도 되고, Dictionary의 Key로도 들어갈 수 있다.
  • 코드 예시
struct GridPoint: Hashable {
    var x: Int
    var y: Int
}


// 이렇게도 되고
var majayongSet = Set<GridPoint>()

// 이렇게도 된다
var majayongDic: [GridPoint: Int] = [:]

 

Set

Swift’s Collection (Array, Dictionary, Set)에 속한다.

  • 컬렉션이 가지는 기본 메서드들을 사용할 수 있다.
  • .contains(), .firstIndex(of: ) 등

배열과 비슷하지만, 중복된 값을 넣을 수 없기 때문에 아무리 추가해도 고유한 요소들만 남는다는 특징을 가진다.

순서가 정해져 있지 않다.

  • 빌드할 때마다 출력되는 값들의 순서가 달라진다.

코드 예시

var myFriends: Set<String> = ["철수", "영희", "수지"]

// .contains()
if myFriends.contains("철수") {
	print("내 친구 중에 철수가 있다!")
}
if !myFriends.contains("철수") {
	print("내 친구 중에 철수는 없다...")
}

// .firstIndex(of: )
if let indexToRemove = myFriends.firstIndex(of: "영희") {
	// if let으로 감싸준 이유 → .firstIndex(of: )는 Optional 타입으로 반환되기 때문
	myFriends.remove(at: indexToRemove)
}

 

Dictionary

배열 형태의 key:value로 이루어진다.

  • 사물함을 여는 것으로 예시를 들 수 있다.

key를 통해 value를 가져오는데, 존재하지 않는다면 (= nil 이라면) 미리 정해둔 default 값을 꺼낼 수 있다.

  • 코드 예시
var myFriends = ["best" : "냐옹이",
                 "awkward" : "지우"
                ]
let unknownFriend = myFriends["unknwon", defualt: "모름"]

값을 바꾸거나 새로운 데이터를 넣을 수 있다.

  • 새로운 key로 직접 추가
  • Collection 메서드 이용 → .updateValue(value: , forKey: )

 

활용 - 백준 1157번

let input = readLine()!.uppercased()
var splitted: [Character] = [ ]

input.forEach { character in
    splitted.append(character)
}

let alphabetSet: Set<Character>  = Set(splitted)
var counted: [Character: Int] = [:]

for alphabet in alphabetSet {
    let num = splitted.filter { character in
        return alphabet == character
    }.count
    counted[alphabet] = num
}

let filtered = counted.filter { dictionary in
    return dictionary.value == counted.values.max()!
}

if filtered.count == 1 {
    print(filtered.first!.key)
} else { print("?") }

 


 

참고

Swift ) Hashable
스위프트 기초 문법 - 14일차 / 딕셔너리
스위프트 기초 문법 - 19일차 / Set
[Swift] 1157 단어공부 - 백준 B1

 

'공부 > Swift, algorithm' 카테고리의 다른 글

[Swift] #Selector()  (0) 2022.04.19
타입 메서드와 프로퍼티  (0) 2022.04.14
MacOS (Xcode)에서 #include <bits/stdc++.h> 헤더 사용하기  (0) 2022.01.28
퀵 정렬  (0) 2021.08.26
버블정렬, 선택정렬, 삽입정렬  (0) 2021.08.24

댓글