CS2335
Master_v2
Master_v2
  • Introduction
  • Introduction
    • Introduction
      • Design
      • Game Design
    • Unity - Download
    • Visual Studio - IDE
    • Hero's Journey
  • Unity Basics
    • Unity Editor Windows
    • MonoBehavior - Base-Class
    • Unity Engine - Event Functions
  • Getting Started
    • UI-Elements
    • Animator Controller
      • Animation Steps
    • PlayerController Flow Chart
    • PlayerController Code
      • PlayerController - V1 - S20
      • PlayerController V2 S20
      • PlayerController V3 S20
  • Project 1 - Simple Game
    • Overview
    • Project 1 - Get Started
      • UML Class Diagram
    • Player GameObject
      • PlayerController.cs V2
      • PlayerController.cs V3
    • Create 2D Sprite Prefab: Rock
    • Sorting Layers
  • Project1 Code
    • PickUp PreFabs
    • Player GameObject
    • PlayerController - jump
    • GameData Version1
    • PlayerStats Version1
    • MiniGameManager
      • Logic Diagram
    • Simple Spawner
    • Utility Class
  • Project1 Enhancements
    • PickUp - SelfDestruct
    • Spawn from List of Prefabs
  • Project 2 - StateManager
    • Project 2 - Learning Objectives
    • Project 2 - Starter Assets
    • Project 2
      • State Machine Framework
        • Singleton Pattern
      • StateManager - Singleton Design Pattern
      • IStateBase, BeginState
      • Project 2 -Steps: Create new Scene and State
      • Project 2 - List of Steps
        • Project 2 - Starter Code
  • Project 2 -Dialog
    • Hide_Show_Panel Script
    • Configure TitlePanel, DecisionPanel
    • Simple Dialog Prefab
    • Conversation Scriptable Objects
    • DialogManager_ConvList
    • Image Transitions for Buttons
  • UI Components
    • Finding Game Objects
    • Game Objects: UI vs. 2D Sprite
    • UI Elements
      • Canvas: Screen-Space Render-Mode
      • UI-Buttons To Change Scene
      • Text Input
  • Project2 Resources
    • Visual Novel in Unity-Links
    • Scriptable Object Factory
      • ScriptableObjects
    • Dialog Prefab Packages
  • Project 3 - Overview
    • Branching Story Structures
    • Dictionary Data-Structure
      • Unity PlayerPrefs Dictionary
    • Dictionary: User-Choice Data
      • User-Choices - Example
        • Dictionary Value to Disable Options
    • Simplified Mini-Game
      • PlayerController_v2 Mods
        • PlayerController_v2_final
      • MiniGameManager_v2
  • Proj3: Inventory System
    • Inventory-System
      • Install and Configure
      • Diagrams, Resources
        • Item, Gem, Potion Classes
        • Inventory Class
      • InventoryDisplay, Slot UI
        • InventoryDisplay Class
        • Slot Class
        • Hazard Class
        • Layout Groups
      • Customization Steps
        • Configure Animation
        • AddItem Button
        • Concrete Class: Food
        • MiniGame Mods
          • PlayerController Mods
      • Code: InventorySystem
        • GameData, PickUp Mods
      • Resources: Data Structures
  • Proj3: Custom UnityEvents
    • Event Publishing Patterns
    • Custom Event Messaging
  • Proj3: Mini-Game
    • MiniGame-Overview-Proj3
    • LevelManager
      • LevelManager Logic Diagram
      • LevelManager FSM
      • LoadLevel, StartLevel Logic
      • Code Framework
    • Timer
  • Project 3 - Code Mods
    • Project 3 - Steps
    • Project 3 - Code
      • Code: Final Versions
        • PlayerController Mods
          • PlayerController_v2 Mods
        • GameData - Final
        • LevelManager
        • PlayerStats - Final
        • PickUp, Hazard, ScorePickUp
        • Spawner - Final
        • CameraFollow
        • ScreenFader
        • MiniGameState
        • Example: EndState
      • MiniGameWin Logic
  • Optional, Supplemental Content
    • Optional Content
      • Adding Audio
      • Screen Fading and Reloading
      • ScriptableObjects
      • Disable Debug Logging
      • Events and Actions
      • Saving Data - Serialization
      • Parallax Scrolling
      • Change Sprites
  • C# Language
    • C# Language
      • Variables
      • Enum
      • Encapsulation
        • C# Properties
        • Access Modifiers
      • Inheritance
      • Polymorphism
      • Interface
      • Switch-Case
      • List< T >
      • Queue< T >
      • Dictionary
      • Foreach
      • Static
      • Ternary Operator: ?
      • this
      • Delegates
    • Diagrams
      • State Machine Framework
      • UML Class Diagrams
      • Level Manager Logic Diagram
      • Flow-Chart: NumberGame
      • FSM: NumberGame
    • Glossary
    • References and Resources
    • Random Thoughts
Powered by GitBook
On this page
  • Dictionary.Add()
  • Dictionary.ContainsKey( )
  • TryGetValue( TKey key, out val)
  • foreach Loop

Was this helpful?

  1. C# Language
  2. C# Language

Dictionary

PreviousQueue< T >NextForeach

Last updated 5 years ago

Was this helpful?

A Dictionary represents a collection of Key / Value pairs.

Dictionary < TKey, TValue > //syntax to declare a new Dictionary object-reference.

The Key is used as a indexer 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.

Dictionary.Add()

        Dictionary<string, int> inventory = new Dictionary<string, int>();
         inventory.Add("frogs", 2);
         inventory.Add("puppies", 3);
         inventory.Add("frogs", 3); //this will generate an error since the frog key already exists

Dictionary.ContainsKey( )

There are many Dictionary methods to let us interact and modify Dictionary elements. Before we can work with the Dictionary, for inserts or any other modification, we should always to check to see if the key, associated with our current item. Otherwise, we'll get a run-time error based on the existence in the dictionary. Similarly, if we want to update the value of a dictionary item, we must first check that the key exists.

        //correct approach - check for key before using Add() method
         if(inventory.ContainsKey("frogs")){  //if key exists, then update value
              //to update a value
            inventory["frogs"] = 3;   //bracket notation gives access to the value element
         }
         else{
            inventory.Add("frogs", 1);  //create a new dictionary element that is key/value pair
         }

         int numCows = inventory["cows"];  //this will generate an error since the key doesn't exist

TryGetValue( TKey key, out val)

We can also use the C# Dictionary function: TryGetValue( ) to both test to see whether a key is in the dictionary, and it will return the value in the variable declared with the variable modifier out

 ///using System.Collection.Generic;  

       Dictionary< string, int> myDictionary = new Dictionary<string, int>();
        myDictionary.Add("Zombie", 1);

        //get value from dictionary

        int numZombies = 0;
        if(myDictionary.TryGetValue("Zombie", out numZombies)){
            Debug.Log(" NumZombies " + numZombies);
        }
        else{
           Debug.Log("No zombies found");
        }

foreach Loop

In order to iterate through all items in a dictionary, we can use a foreach loop which is a range-based for-loop as opposed to a count-based for-loop. Since each inventory item is a key/value pair which is a complex dataType, we can use var as the variable type that will temporarily hold each item so we can manipulate the item. We can also use the KeyValuePair struct data-type if we declare the type of each dictionary element.

         foreach(var item in inventory){  //use var variable type
              int itemTotal=item.Value;
              string itemName=item.Key
            Debug.Log( itemName + "  " + itemTotal);
          }  

          foreach( KeyValuePair<string, int> item in inventory){  
                 Debug.Log( item.Key + "  " + item.Value);
          }

MSDN Reference:

MSDN Reference
TryGetValue(TKey key, out val )