# Dictionary Data-Structure

Links:\
[MSDN: Dictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?redirectedfrom=MSDN\&view=netframework-4.7.2)

[Gitbook Definition and Examples](/cs2335/master_v2/c-language/c_language/dictionary.md)

[Unity Scripting Tutorial: Dictionary ](https://unity3d.com/learn/tutorials/modules/intermediate/scripting/lists-and-dictionaries)

[Unity TextAdventure Tutorial - Use Dictionary Inventory](https://unity3d.com/learn/tutorials/topics/scripting/preparing-use-item-dictionary)

[Using Arrays, Lists, ArrayLists, Dictionaries, HashTable in Unity](https://hub.packtpub.com/arrays-lists-dictionaries-unity-3d-game-development/)

## Dictionaries: A collection of Key,Value pairs

Dictionaries provide a data-structure for storing data that has 2 associated parts, which is very useful for data associated with games, such as inventory systems, character choice systems, weapon systems, etc.

The Key is used as a index to allow storage of a value that is associated with a unique Key. **Keys must be unique, there cannot be duplicate Keys** in a dictionary, so we must use care when adding new elements to a dictionary object to ensure that the item's key does not already exist in the dictionary. There are several methods that can be used to test for the presence of a specific key, these helper functions prevent runtime errors in our programs.

Unity does not show Dictionary elements in the inspector.

**Include as a directive at top of script:** **using System.Collections.Generic;**

Dictionary < TKey,TValue >\
Dictionary - you specify the data-type of the key: Tkey, and value: TValue.

Unity does not show Dictionary elements in the inspector.

## Simple Dictionary Examples:

### **Code Snippets**&#x20;

### TKey:  PickupType, enum type of Pickup objects

### TValue: int, count of number of items

```java
public Dictionary<PickupType, int> inventory_v1 = new Dictionary<PickupType, int>(); //initialize

inventory_v1.Add(PickupType.Gem, 1); //add an item
int gems = inventory_v1[PickupType.Gem]; //get value associated with key

inventory_v1[PickupType.Gem] = 2; //change an item

if( inventory_v1.ContainsKey( PickupType.Cow ){
  int count = inventory_v1[PickupType.Cow]
  inventory_v1[PickupType.Cow] = count +1;
}else{
   Debug.Log("No Cows")
   inventory_v1.Add( PickupType.Cow, 1); //added
}

//TryGetValue
int count = 0;
if( inventory_v1.TryGetValue( PickupType.Gem,out count){
  inventory_v1[PickupType.Gem] = count + 1;
  } 
  else{
    inventory_v1.Add(PickupType.Gem ,1);
  }
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kdoore.gitbook.io/cs2335/master_v2/project3_overview/dictionary-data-structure.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
