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

이 글은 읽는데 약 6분이 걸립니다.

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


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역할)를 찾기만 하면 됩니다.
여기서 알 수 있듯, 키는 값을 찾기 위한 목적이기에, 중복되서는 안됩니다.
만약 값이 달라도 키가 같으면 기존의 값이 덮어쓰기 됩니다. 값을 동일해도 관계없습니다.

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

2. 블록 탐구

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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


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

위 처럼 합치면, testDictionary의 값은

위 형태처럼 변화됩니다.


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

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

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

댓글

제목과 URL을 복사했습니다