사전으로 데이터 매핑하기
containers.Map
.사전은 서로 다른 유형의 데이터 간에 연결을 생성하는 데이터 구조입니다. 사전은 데이터를 값으로 저장하며, 이 값은 대응하는 고유한 키를 사용하여 액세스됩니다. 키와 값은 서로 다른 데이터형일 수 있으며, 각 키와 값 쌍은 항목에 해당합니다.
사전의 기본 기능은 한 데이터 세트의 요소를 사용해 이에 대응하는 다른 데이터 세트의 요소를 찾을 수 있도록 두 개의 연관된 데이터 세트를 연결하는 것입니다. 이 동작을 룩업이라고 합니다. 사전은 사전에 있는 항목 수에 관계없이 일관된 성능을 제공합니다.
이 예제에서는 사전을 만들고 항목을 수정하는 방법을 보여줍니다. 그런 다음 사전이 데이터형을 처리하는 방법과 서로 다른 데이터형을 저장하는 방법을 보여줍니다.
사전 만들기
예를 들어, 제품을 키로 사용하고 가격을 값으로 사용하여 사전을 만들어 보겠습니다. 사전 출력값은 키와 값의 데이터형을 나타냅니다.
Products = ["Tomato" "Carrot" "Mango" "Mushroom"]; Prices = [1 .5 2.50 1.99]; d = dictionary(Products,Prices)
d = dictionary (string --> double) with 4 entries: "Tomato" --> 1 "Carrot" --> 0.5000 "Mango" --> 2.5000 "Mushroom" --> 1.9900
이제 룩업을 수행하여 당근의 가격을 찾아보겠습니다. 연관된 키를 사용하여 사전에 있는 어떠한 가격도 찾을 수 있습니다.
d("Carrot")
ans = 0.5000
사전 수정하기
새 항목을 사전에 삽입하려면 등호(=
)를 사용하여 값을 새 키에 매핑하면 됩니다. 다음 명령은 가격 0.75
를 값으로 하여 키 "Potato"
를 추가합니다.
d("Potato") = 0.75
d = dictionary (string --> double) with 5 entries: "Tomato" --> 1 "Carrot" --> 0.5000 "Mango" --> 2.5000 "Mushroom" --> 1.9900 "Potato" --> 0.7500
새 값을 기존 키에 매핑하여 항목을 변경할 수 있습니다. 다음 명령은 "Tomato"
의 가격을 1.25
로 변경합니다.
d("Tomato") = 1.25
d = dictionary (string --> double) with 5 entries: "Tomato" --> 1.2500 "Carrot" --> 0.5000 "Mango" --> 2.5000 "Mushroom" --> 1.9900 "Potato" --> 0.7500
키를 빈 배열([]
)에 매핑하여 항목을 제거합니다. 다음 명령은 "Mango"
에 대한 항목을 제거합니다.
d("Mango") = []
d = dictionary (string --> double) with 4 entries: "Tomato" --> 1.2500 "Carrot" --> 0.5000 "Mushroom" --> 1.9900 "Potato" --> 0.7500
한 번에 하나의 항목에 대해 연산을 수행하는 대신, 앞에서의 동작을 벡터화할 수 있습니다. 예를 들어, 다음 명령은 연관된 가격과 함께 "Celery"
및 "Grapes"
에 대한 두 개의 새 항목을 추가합니다.
d(["Celery" "Grapes"]) = [0.50 1.95]
d = dictionary (string --> double) with 6 entries: "Tomato" --> 1.2500 "Carrot" --> 0.5000 "Mushroom" --> 1.9900 "Potato" --> 0.7500 "Celery" --> 0.5000 "Grapes" --> 1.9500
사전 및 데이터형
사전의 키와 값은 거의 모든 데이터형이 될 수 있으며, 사전은 항목을 기반으로 유형이 지정됩니다. 데이터형이 할당되면 사전이 구성됩니다.
키와 값은 동일한 데이터형일 필요가 없습니다. 그러나 사전의 모든 키와 모든 값은 각 데이터형을 공유하거나 구성된 데이터형으로 변환될 수 있어야 합니다.
사전에 대해 구성된 데이터형과 일치하지 않는 새 항목이 삽입되는 경우 MATLAB®은 구성과 일치하도록 데이터형을 변환하려고 시도합니다.
예를 들어, string형 키와 값을 받는 사전을 만들어 보겠습니다. 그런 다음 숫자형 값을 포함하는 항목을 추가합니다. MATLAB은 이 값을 string형으로 변환합니다.
d = dictionary("hello","world")
d = dictionary (string --> string) with 1 entry: "hello" --> "world"
d("newKey") = 1
d = dictionary (string --> string) with 2 entries: "hello" --> "world" "newKey" --> "1"
isstring(d("newKey"))
ans = logical
1
서로 다른 데이터형을 사전에 저장하기
사전에서는 모든 항목이 키와 값별로 각각 동일한 데이터형을 공유해야 합니다. 그러나 데이터를 셀형 배열에 넣는 방법으로 사전에 여러 데이터형을 저장할 수 있습니다. 셀형 배열의 각 요소는 어떠한 유형이나 크기의 데이터도 포함할 수 있습니다. 이 접근 방식에서는 모든 값이 셀형 배열이므로 사전 유형 요구 사항을 충족합니다.
다양한 데이터형의 값을 포함하는 셀형 배열을 만든 다음 키로 구성된 string형 배열을 만듭니다.
myCell = {datetime,@myfun,struct,[1 2 3 4]}
myCell=1×4 cell array
{[20-Jul-2024 15:26:39]} {@myfun} {1x1 struct} {[1 2 3 4]}
names = ["my birthday" "my favorite function" "a structure" "numeric array"]
names = 1x4 string
"my birthday" "my favorite function" "a structure" "numeric array"
지정된 키와 값을 사용하여 사전을 만듭니다.
d = dictionary(names,myCell)
d = dictionary (string --> cell) with 4 entries: "my birthday" --> {[20-Jul-2024 15:26:39]} "my favorite function" --> {@myfun} "a structure" --> {1x1 struct} "numeric array" --> {[1 2 3 4]}
R2023a에서는 중괄호({}
)를 사용하여 값으로 저장된 셀의 내용을 직접 조회합니다.
d{"numeric array"}
ans = 1×4
1 2 3 4
마찬가지로 중괄호({}
)를 사용하여 임의의 데이터형의 새 항목을 셀 값이 있는 기존 사전에 삽입할 수 있습니다.
d{"a new entry"} = table
d = dictionary (string --> cell) with 5 entries: "my birthday" --> {[20-Jul-2024 15:26:39]} "my favorite function" --> {@myfun} "a structure" --> {1x1 struct} "numeric array" --> {[1 2 3 4]} "a new entry" --> {0x0 table}
데이터형 제한 사항
사전은 거의 모든 데이터형의 항목을 허용하지만 몇 가지 제한 사항이 있습니다. struct
형과 같은 특정 데이터형은 항목의 일부로 허용되지만, 서로 다른 필드를 갖는 구조체에는 벡터화 연산이 지원되지 않습니다. 결합할 수 없는 유형에는 벡터화된 룩업이 지원되지 않습니다.
사전은 다음 데이터형을 키 또는 값으로 받지 않습니다.
테이블
tall형 배열
분산 배열
graph
및digraph
객체
구성되지 않은 사전
항목 없이 사전을 만들면 이는 구성되지 않은 사전에 해당하고 키와 값에 데이터형이 할당되지 않습니다.
d = dictionary
d = dictionary with unset key and value types.
isConfigured(d)
ans = logical
0
configureDictionary
를 사용하여 항목 없이 구성된 사전을 만듭니다.
d = configureDictionary("string","double")
d = dictionary (string --> double) with no entries.
R2023b 이전 원하는 데이터형의 empty
입력값을 생성하여 항목을 추가하지 않고 사전을 구성할 수 있습니다. 예를 들면 dictionary(string.empty,struct.empty)
와 같습니다.
참고 항목
dictionary
| keyHash
| keyMatch