앱인벤터2 새로 추가된 Dictionaries 블록에 대해서 알아보자!

전체 강좌 목록:
http://semicolon1.dothome.co.kr/appinventor.html

 

post_new_dict_01.png

0. 개요

이번에 알아볼 것은 최근 앱인벤터2에 새로 추가된 Dictionaries블록에 대해서 알아보도록 하겠습니다.
해당 블록들은 앱인벤터2 블록에디터의 리스트와 색상 카테고리 사이에 추가되었으며, 블록의 색상은 #2E2099입니다.

릴리즈 정보
릴리즈 날짜 2020년 02월 03일
릴리즈 네임 nb182
릴리즈노트 원문 [Feature] Added support for JSON-like dictionaries to the blocks language. There is a new category of blocks, called Dictionaries, that contains blocks for manipulating dictionaries. There are also blocks to convert traditional associative lists (lists of lists) into dictionaries and vice versa. (Thanks @data1013)
릴리즈노트 번역 [기능] 블록에 JSON과 유사한 Dictionaries를 지원합니다. Dictionaries라 불리는 새 카테고리의 이 블록은 사전같은 기능을 다루기 위한 기능을 포함 합니다. 또한 기존의 리스트를 Dictionaries로 변환하거나, 그 반대도 있습니다. (고마워요 @data1013)

Dictionary는 값을 키-값 형식으로 짝지어 저장하는 기능을 가지고 있습니다.
TinyDB의 저장방식과 유사한데요, 이는 TinyDB처럼 값을 기기상에 직접 저장하지 않고 리스트처럼 변수상에서 사용가능하다는 점이 다릅니다.

 

1. 값을 저장하는 방식

위에서도 말했듯이, 하나의 Dictionaries는 키-값을 짝지어 여러값을 저장할 수 있습니다.
키(key)는 값(value)을 구분하기 위한 라벨이라 할 수 있습니다.
예시로 사전을 보면 어떤 단어의 뜻(value역할)을 알기위해서 순서대로 정렬된 단어(key역할)를 찾기만 하면 됩니다.
여기서 알 수 있듯, 키는 값을 찾기 위한 목적이기에, 중복되서는 안됩니다.
만약 값이 달라도 키가 같으면 기존의 값이 덮어쓰기 됩니다. 값을 동일해도 관계없습니다.

post_new_dict_02.png

네… 내부적으로 저런식으로 값을 저장하신다고 보면 됩니다.
미국과 영국의 경우 값이 영어로 같지만 키가 다르기 때문에 그대로 저장됩니다.
만약 저기서 한국-영어 식으로 추가하려 한다면 밑에가서 추가되는게 아니라, 한국-한국어가 한국-영어로 바뀌게 되는 것 입니다.

2. 블록 탐구

이제 본격적을 블록의 각 기능에 대해 알아보도록 하겠습니다.

post_new_dict_03.png
빈 Dictionary를 생성 합니다. 리스트의 빈 리스트 만들기블록과 같은 역할을 합니다.

post_new_dict_04.png
키-값 을 추가하여 dictionary를 생성합니다. 좌측 상단의 톱니바퀴를 눌러서 pair 블록을 추가함으로써 위 블록의 우측의 키-값의 개수를 늘릴 수 있습니다.

post_new_dict_05.png
키-값의 짝을 생성합니다.

post_new_dict_06.png
첫번째 칸에서 입력받은 키로 두번째 칸에서 입력받은 dictionary에서 값을 찾고, 반환합니다.
만약 입력받은 키가 해당 dictionary에 없으면 세번째 칸에 입력받은 텍스트를 반환합니다.

post_new_dict_07.png
두번째 칸에서 입력받은 dictionary에서 첫번째 칸에 입력받은 키와 세번째 칸에서 입력받은 값을 짝지어 뒤에 추가합니다.
만약 키가 이미 존재하면 값은 그 자리에서 덮어쓰기 됩니다.

post_new_dict_08.png
두번째 칸에서 입력받은 dictionary에서 첫번째 칸에서 입력받은 키를 가진 키-값 짝을 삭제합니다.
만약 해당하는 키가 없으면 아무것도 변경되지 않습니다.

post_new_dict_09.png
첫번째 칸에서 리스트 형태로 키 경로를 입력받은 후, 두번째 칸에서 입력받은 dictionary에서 값을 찾아 반환합니다.
만약, 해당하는 값이 없는 경우, 세번째 칸에서 입력받은 텍스트가 반환됩니다.
이 부분은 복잡하므로 강좌가 분리될 예정 입니다.

post_new_dict_10.png

첫번째 칸에서 리스트 형태로 키 경로를 입력받은 후, 두번째 칸에서 입력받은 dictionary에서 해당 위치에 세번째 칸에서 입력받은 값을 추가 합니다. 이미 존재하는 경우 덮어쓰기 됩니다.
이 부분은 복잡하므로 강좌가 분리될 예정 입니다.

post_new_dict_11.png
첫번째 칸에서 입력받은 dictionary의 모든 키를 리스트로 만들어 반환합니다.

post_new_dict_12.png
첫번째 칸에서 입력받은 dictionary의 모든 값을 리스트로 만들어 반환합니다.

post_new_dict_13.png
첫번째 칸에서 입력받은 키가 두번째 칸에서 입력받은 dictionary에 존재하는 지 체크후, 참/거짓을 반환합니다.

post_new_dict_14.png
해당 dictionary의 키-값 쌍의 개수를 반환합니다.
아무것도 없는(빈) dictionary의 경우 0이 반환됩니다.

post_new_dict_15.png
입력받은 리스트를 dictionary 형식으로 변환하여 반환합니다. 이때 리스트의 형태는 반드시 아래의 사진처럼 키-값에 해당하는 꼴이 있어야 오류가 나지 않습니다.


예시로, 다음과 같은 리스트가 있습니다:

post_new_dict_16.png
이때 리스트로는 각 값에 다음과 같이 접근할 수 있습니다:

post_new_dict_17.png

리스트의 위치에 주의하세요.

또한, 위 사진에서 전역변수 testDictionary에 저장된 값은 아래 dictionary의 구조와 동일합니다:

post_new_dict_18.png

post_new_dict_19.png

Error from Companion: List of pairs to dict…
이런식으로, 키-값 꼴이 아닌 단순 리스트인 경우 위와 같이 오류가 나게 됩니다.


post_new_dict_20.png

위 블록과 반대로 dictionary를 리스트 형태로 반환합니다.

post_new_dict_21.png

첫번째 칸에 입력받은 dictionary를 그대로 복사해서 반환합니다.

post_new_dict_22.png

첫번째 칸에 입력받은 dictionary에 두번째 칸에 입력받은 dictionary를 이어 붙입니다.
이때, 중복되는 키는 그 자리에서 덮어쓰기 됩니다.


post_new_dict_23.png

예시로, 위와 같은 두 dictionary가 있을때

post_new_dict_24.png

위 처럼 합치면, testDictionary의 값은

post_new_dict_25.png

위 형태처럼 변화됩니다.


post_new_dict_26.png

첫번째 칸에서 리스트 형식으로 입력받은 경로로 이동하여서 두번째 칸의 리스트 또는 dictionary의 값을 탐색합니다. 그리고 리스트로 반환합니다.
이 부분은 복잡하므로 강좌가 분리될 예정 입니다.

post_new_dict_27.png

해당 위치에 존재하는 모든 값을 읽습니다.
이 부분은 복잡하므로 강좌가 분리될 예정 입니다.

post_new_dict_28.png

입력 받은 것이 dictionary 형태인지 확인후, 참/거짓을 반환합니다.

댓글

Copied title and URL