안녕하세요. 이지이지입니다.
이번 포스팅에서는 딕셔너리(Dictionary) 블록에 대해 알아보도록 하겠습니다.
딕셔너리(Dictionary)란? |
딕셔너리는 키(key)와 값(value)으로 이루어진 데이터 구조를 말하며,
우리가 일상에서 사용하는 실제 사전을 생각하면 이해하기 쉽습니다.
예를 들어 사전에서 pencil: 연필의 뜻을 찾는다고 하면,
앱인벤터에서 "pencil"은 키가 되고 그 뜻인 "연필"은 값이 됩니다.
앱인벤터에서 딕셔너리의 구조는 중괄호 { }안에 {"키":"값"}으로 표현됩니다.
딕셔너리는 앱인벤터에서 자주 사용하는 Firebase의 구조인 json과도 잘 어울립니다.
딕셔너리(Dictionary) 블록 |
빈 딕셔너리를 만드는 블록입니다.
- 나중에 set value for key 블록을 통해 추가할 수 있습니다.
딕셔너리를 만드는 블록입니다.
- 좌측의 톱니바퀴를 눌러 항목의 개수를 늘릴 수 있습니다.
- 딕셔너리에는 하위 딕셔너리를 만들 수 있으며, 값으로 리스트를 넣을 수도 있습니다.
위의 블록은 다음과 같은 구조를 가지게 됩니다.
{"No": 1, "Name": "이순신", "School": {"Region": "서울", "Name": "이지고"}, "성적":["90", "85", "88"]}
트리 구조로 나타내보면 다음과 같습니다.
{
"No": 1,
"Name": "이순신",
"School": {
"Region": "서울",
"Name": "이지고"
},
"성적":["90", "85", "88"]
}
key와 value로 이루어진 쌍을 만드는 블록입니다.
특정 키에 대한 값을 구해오는 블록입니다.
- get value for key: 값을 찾을 키 입력
- in dictionary: 키가 있는 딕셔너리 이름
- or if not found: 만약 키가 없다면 "not found"를 결과로 반환하라.
키에 대한 값을 변경하는 블록입니다.
만약 키가 존재하고 있다면 그 키에 해당하는 값을 변경하며,
키가 존재하지 않는다면 키와 값을 추가하게 됩니다.
- set value for key: 값을 변경할 키를 입력
- in dictionary: 키가 존재하는(생성될) 딕셔너리 이름
- to: 변경할(생성할) 값
딕셔너리에서 주어진 키에 해당하는 키와 값을 삭제하는 블록입니다.
- remove entry for key: 삭제할 키 입력
- from dictionary: 삭제할 키가 있는 딕셔너리 이름
지정한 경로에 있는 키(입력값이 키라면)나 인덱스(입력값이 리스트라면)에 해당하는 값을 가져오는 블록입니다.
- get value at key path: 경로 입력
→ 경로는 리스트 형태로 입력하며, 첫 번째 항목은 딕셔너리 내에서 가장 상위 항목, 두 번째 항목은 그 첫 번째 하위 항목 등으로 입력합니다.
- in dictionary: 키가 존재하는 딕셔너리 이름
- or if not found: 만약 키가 없다면 "not found"를 결과값으로 반환하라.
위의 변수 Data의 구조를 트리 형식으로 나타내면 다음과 같습니다.
{
"No": 1,
"Name": "이순신",
"School": {
"Region": "서울",
"Name": "이지고"
},
"성적":["90", "85", "88"]
}
get value at key path에서 리스트의 첫 번째 항목을 "Name"으로 했기 때문에,
가장 상위 수준에서 키가 "Name"인 값 "이순신"을 가져오게 됩니다.
위 블록에서 빨간색 부분만 수정한 다음 블록을 보면,
key path에 첫 번째 항목은 "School"이므로, 트리 구조에서 가장 상위에서 키 "School"을 찾고,
그 하위 항목에서 키가 "Name"인 값을 찾으므로, "이지고"가 결과로 도출됩니다.
{
"No": 1,
"Name": "이순신",
"School": {
"Region": "서울",
"Name": "이지고"
},
"성적":["90", "85", "88"]
}
리스트에서 경로를 설정하는 방법을 보기 위해, 다음 블록을 살펴보면
먼저 가장 상위 항목에서 키가 "성적"인 값을 찾고,
"성적" 안에는 리스트가 저장되어 있으므로 리스트 안의 "2"번째 항목을 찾으면 "85"가 결과로 반환됩니다.
지정한 경로에 있는 키(입력값이 키라면)나 인덱스(입력값이 리스트라면)에 해당하는 값을 변경하는 블록입니다.
- 위의 get value for key path와 같은 개념입니다.
- 지정한 경로는 딕셔너리 내에서 반드시 존재해야 하며, 마지막 경로는 존재하지 않아도 되는데, 이 때는 마지막 경로에 key-value 쌍을 새로 생성하게 됩니다.
딕셔너리에 있는 모든 key를 가져오는 블록입니다.
- get keys: 키를 가져 올 딕셔너리
- 딕셔너리에 다른 하위 딕셔너리가 있어도, 가장 상위 딕셔너리의 key만 가져옵니다.
딕셔너리에 있는 모든 value를 가져오는 블록입니다.
- get values: 값을 가져올 딕셔너리 입력
키가 딕셔너리에 존재하는지 알아내는 블록입니다.
- 키가 존재하면 true를, 존재하지 않으면 false를 반환합니다.
- key: 키를 입력
- dictionary: 키가 존재하는 딕셔너리 이름 입력
딕셔너리의 key의 개수를 알아내는 블록입니다.
- 가장 상위의 key 개수만 알아냅니다.
- dictionary: key의 개수를 알아낼 딕셔너리 입력
[[key1, value1], [key2, value 2]] 처럼 키와 값의 쌍으로 이루어진 리스트를 딕셔너리 형태로 바꾸는 블록입니다.
- pairs: 쌍으로 이루어진 리스트 입력
딕셔너리를 [[key1, value1], [key2, value2]]처럼 키와 값 쌍으로 이루어진 리스트로 변환하는 블록입니다.
- list of pairs to dictionary pairs 블록의 반대 개념입니다.
- dictionary: 리스트로 바꿀 딕셔너리 입력
딕셔너리를 복사하는 블록입니다.
- dictionary: 복사할 딕셔너리 입력
딕셔너리 A에 다른 딕셔너리 B에 있는 키-쌍을 더하는 블록입니다.
- 만약 두 딕셔너리에 중복된 키가 있을 경우, 값을 덮어쓰게 됩니다.
- merge into dictionary: 딕셔너리 A
- from dictionary: 딕셔너리 B
주어진 경로를 따라 그 경로에 있는 값들을 리스트 형태로 가져오는 블록입니다.
- 딕셔너리의 key와 리스트의 index, walk all at level 블록을 조합하여 사용합니다.
- key path: 경로를 리스트 형태로 입력
- in dictionary or list: 경로가 존재하는 딕셔너리 또는 리스트
- 경로에서 walk at all level블록을 만나면, 하위 수준이 아닌 같은 수준에 있는 값들을 찾게 됩니다. (아래 예 참조)
→ 비유하자면 종이 아닌 횡으로 이동하는 것입니다.
다음과 같은 트리 구조로 된 데이터를 예로 들어보겠습니다.
{
"Students":[
{"이름":"홍길동", "나이":30},
{"이름":"왕건", "나이":40},
{"이름":"김유신", "나이":50}
]
}
경로에서 가장 상위 항목인 "Students"를 찾고,
리스트에서 두 번째 항목인 {"이름":"왕건", "나이":40}을 찾은 다음
그 수준의 모든 값을 찾아 리스트 형식으로 결과를 반환하므로 ["왕건", 40]이 반환됩니다.
경로에서 가장 상위 항목인 "Students"를 찾고,
"Students"에 있는 모든 값 [{"이름":"홍길동","나이":30}, {"이름":"왕건","나이":40}, {"이름":"김유신","나이":50}]을 찾은 다음,
키가 "나이"인 값을 찾아 리스트 형식으로 반환하므로 [30, 40, 50]이 반환됩니다.
입력된 것이 딕셔너리인지 아닌지 알아봅니다.
- is a dictionary?: 딕셔너리 여부를 알아볼 항목 입력
- 만약 딕셔너리가 맞다면 true를, 딕셔너리가 아니라면 false를 반환합니다.
지금까지 앱인벤터 딕셔너리(Dictionary) 블록에 대해 알아보았습니다.
앱인벤터 사용자라면 누구나 꼭 한 번은 사용해볼 firebase라던가, 뛰어난 검색 기능을 갖춘 딕셔너리!!!
꼭 익히셔서 유용하게 사용하시기 바랍니다.~
댓글