딕셔너리(Dictionary) 구현해보기

Lainlnya·2022년 9월 28일
0

알고리즘

목록 보기
11/25

딕셔너리란?

key-value 형태로 다양한 자료형 개체(Entity)를 저장하는 자료구조(Map)
딕셔너리

구현 메서드

  • 전체 개체 획득 / 초기화 / 크기 반환: Dictionary.getBuffer(), Dictionary.clear(), Dictionary.size()
  • 개체 추가 / 삭제 / 반환 / 여부: Dictionary.set(), Dictionary.remove(), Dictionary.get(), Dictionary.has()
  • key, value 배열 반환 / 고차 함수: Dictionary.keys(), Dictionary.values(), Dictionary.each()

1. 딕셔너리 클래스 선언

class Dictionary {
    constructor (items = {}) {
        this.items = items;
    }
}

2. 객체 데이터 셋 반환 (getBuffer())

…(spread)를 활용해서 객체 데이터 셋을 반환한다.

getBuffer () {
        return { ...this.items };
    }

3. 딕셔너리 클래스 초기화 (clear())

clear () {
        return this.items = {};
   }

4. 딕셔너리 클래스의 크기 반환 (size())

Object에 내장되어있는 key 메서드를 통해 key를 array로 반환할 수 있는데, array의 length의 통해 크기를 반환한다.

size () {
        return Object.keys(this.items).length;
    }

5. 개체 존재 여부 확인 (has())

has (key) {
        return this.items.hasOwnProperty(key);
    }

6. 개체(Entity) 추가 (set())

set (key, value) {
        this.items[key] = value;
    }

7. 개체의 value 반환 (get())

위에 있던 key의 존재여부 확인을 통해 key가 있다면 key를 확인하여 value를 반환하거나, 없다면 undefined를 반환한다.

get (key) {
        return this.has(key) ? this.items[key] : undefined;
    }

8. 개체 삭제 (remove())

위에 있던 key의 존재여부 확인을 통해 key가 있다면 key를 확인하여 삭제하고 true를 반환하고, 아니면 false를 반환한다.

remove (key) {
        if (this.has(key)) {
            delete this.items[key];
            return true;
        }
        return false;
    }

9. 모든 key 값을 배열 형태로 반환 (keys())

Object에 내장되어있는 key 메서드를 통해 key를 array로 반환한다.

keys () {
	return Object.keys(this.items);
}

10. 모든 value 값을 배열 형태로 반환 (values())

Object에 내장되어있는 values 메서드를 통해 values를 array로 반환

values () {
	return Object.values(this.items);
}

11. 모든 개체 요소에 대해 callback 함수 수행

해당 개체가 있는지 확인하고 존재한다면 함수를 수행한다.

each (fn) {
        for (let k in this.items) {
            if (this.has(k)) {
                fn(k, this.items[k]);
            }
        }
    }

function printDictionary(key, value) {
    console.log(`key: ${key}, value: ${value}`);
}

관련 전체 코드는 Git에 업로드 해두었습니다.
Github_Dictionary

profile
Growing up

0개의 댓글