해시 테이블 (산 목록) - swift 구현
특성 설명
이루어지다
사전 으로 는 key 에 따라 읽 기, 업데이트, 저장 값 을 읽 을 수 있 으 며, 이러한 특성 에 따라 이 루어 집 니 다.
//0
struct HashTable {
//1
private typealias Element = (key: Key, value: Value)
private typealias Bukets = [Element]
//2
private var buckets: [Bukets]
private(set) var count = 0
var isEmpty: Bool { return count == 0 }
//3
init(_ capacity: Int) {
assert(capacity > 0, " ")
buckets = Array.init(repeating: [], count: capacity)
}
//4
private func index(forKey key: Key) -> Int {
return abs(key.hashValue) % buckets.count
}
}
0. 두 개의 범 키 와 Value 좌석 키 - 값 의 유형 을 정의 합 니 다. 그 중에서 Key 는 HashTable 을 계승 해 야 합 니 다.
1. 두 가지 유형, 하나의 원조, 원 조 를 포함 하 는 배열 형식 을 정의 합 니 다.
2. 산 목록 메모리 에 데 이 터 를 저장 하 는 배열 을 정의 합 니 다. 이 buckets 의 유형 은 [Bukets] 이 고 내부 요 소 는 배열 입 니 다. 배열 의 요 소 는 원 그룹 입 니 다. [(key: Key, value: Value), (key: Key, value: Value)], [(key: Key, value: Value), (key: Key, value: Value)], [(key: Key, value: Value)]]
3. 내부 용량 을 초기 화 방법 으로 설정
아래 표 시 를 통 해 이전, 삭제, 검사 의 조작 을 실현 하 다.
private func value(forKey key: Key) -> Value? {
let index = self.index(forKey: key)
for element in buckets[index] {
if element.key == key {
return element.value
}
}
return nil
}
private mutating func upDateValue(value: Value, forKey key: Key) {
let index = self.index(forKey: key)
for (i, element) in buckets[index].enumerated() {
if element.key == key {
let bucketElement = buckets[index]
var keyValue = bucketElement[i]
keyValue.value = value
return
}
}
// key,
buckets[index].append((key, value))
count += 1
}
private mutating func removeValue(forKey key: Key) -> Value? {
let index = self.index(forKey: key)
for (i, element) in buckets[index].enumerated() {
if element.key == key {
buckets[index].remove(at: i)
count -= 1
return element.value
}
}
return nil
}
///
subscript(key: Key) -> Value? {
get {
return value(forKey: key)
}
set {
if let value = newValue {
upDateValue(value: value, forKey: key)
} else {
let _ = removeValue(forKey: key)
}
}
}
이상 은 산 목록 에 대한 간단 한 실현 이 고 그 후에 점차적으로 완 선 될 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.