Lists and Dictionaries

Checked with version: 4.1

-

Difficulty: Intermediate

How to create and use the List and Dictionary collections.

Lists and Dictionaries

Intermediate Scripting

BadGuy

Code snippet

using UnityEngine;
using System.Collections;
using System; //This allows the IComparable Interface

//This is the class you will be storing
//in the different collections. In order to use
//a collection's Sort() method, this class needs to
//implement the IComparable interface.
public class BadGuy : IComparable<BadGuy>
{
    public string name;
    public int power;
    
    public BadGuy(string newName, int newPower)
    {
        name = newName;
        power = newPower;
    }
    
    //This method is required by the IComparable
    //interface. 
    public int CompareTo(BadGuy other)
    {
        if(other == null)
        {
            return 1;
        }
        
        //Return the difference in power.
        return power - other.power;
    }
}
#pragma strict

import System;        // This allows the IComparable Interface.

// This is the class you will be storing
// in the different collections.  In order to use
// a collection's Sort() method, this class needs
// to implement the IComparable interface.
public class BadGuy implements IComparable.<BadGuy>
{
    public var name : String;
    public var power : int;

    public function BadGuy (newName : String, newPower : int)
    {
        name = newName;
        power = newPower;
    }

    // This method is required by the IComparable interface.
    public function CompareTo (other : BadGuy)
    {
        if (other == null)
        {
            return 1;
        }

        // Return the difference in power.
        return power - other.power;
    }
}
import UnityEngine
import System.Collections
import System

//This allows the IComparable Interface
//This is the class you will be storing
//in the different collections. In order to use
//a collection's Sort() method, this class needs to
//implement the IComparable interface.
public class BadGuy(IComparable[of BadGuy]):

    public name as string

    public power as int

    
    public def constructor(newName as string, newPower as int):
        name = newName
        power = newPower

    
    //This method is required by the IComparable
    //interface. 
    public def CompareTo(other as BadGuy) as int:
        if other is null:
            return 1
        
        //Return the difference in power.
        return (power - other.power)

SomeClass

Code snippet

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SomeClass : MonoBehaviour
{
    void Start () 
    {
        //This is how you create a list. Notice how the type
        //is specified in the angle brackets (< >).
        List<BadGuy> badguys = new List<BadGuy>();
        
        //Here you add 3 BadGuys to the List
        badguys.Add( new BadGuy("Harvey", 50));
        badguys.Add( new BadGuy("Magneto", 100));
        badguys.Add( new BadGuy("Pip", 5));
        
        badguys.Sort();
        
        foreach(BadGuy guy in badguys)
        {
            print (guy.name + " " + guy.power);
        }
        
        //This clears out the list so that it is
        //empty.
        badguys.Clear();
    }
}
#pragma strict

import System.Collections.Generic;

public class SomeClass extends MonoBehaviour
{
    function Start ()
    {
        // This is how you create a list.  Notice how the
        // type is specified in the angle brackets (< >).
        var badguys = new List.<BadGuy>();

        // Here you add 3 BadGuys to the List
        badguys.Add (new BadGuy("Harvey", 50));
        badguys.Add (new BadGuy("Magneto", 100));
        badguys.Add (new BadGuy("Pip", 5));

        badguys.Sort();

        for (var guy in badguys)
        {
            print (guy.name + " " + guy.power);
        }

        // This clears out the list so that it is empty.
        badguys.Clear();
    }
}
import UnityEngine
import System.Collections
import System.Collections.Generic


public class SomeClass(MonoBehaviour):

    private def Start():
        //This is how you create a list. Notice how the type
        //is specified in the angle brackets (< >).
        badguys as List[of BadGuy] = List[of BadGuy]()
        
        //Here you add 3 BadGuys to the List
        badguys.Add(BadGuy('Harvey', 50))
        badguys.Add(BadGuy('Magneto', 100))
        badguys.Add(BadGuy('Pip', 5))
        
        badguys.Sort()
        
        for guy as BadGuy in badguys:
            print(((guy.name + ' ') + guy.power))
        
        //This clears out the list so that it is
        //empty.
        badguys.Clear()

SomeOtherClass

Code snippet

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SomeOtherClass : MonoBehaviour 
{
    void Start ()
    {
        //This is how you create a Dictionary. Notice how this takes
        //two generic terms. In this case you are using a string and a
        //BadGuy as your two values.
        Dictionary<string, BadGuy> badguys = new Dictionary<string, BadGuy>();
        
        BadGuy bg1 = new BadGuy("Harvey", 50);
        BadGuy bg2 = new BadGuy("Magneto", 100);
        
        //You can place variables into the Dictionary with the
        //Add() method.
        badguys.Add("gangster", bg1);
        badguys.Add("mutant", bg2);
        
        BadGuy magneto = badguys["mutant"];
        
        BadGuy temp = null;
        
        //This is a safer, but slow, method of accessing
        //values in a dictionary.
        if(badguys.TryGetValue("birds", out temp))
        {
            //success!
        }
        else
        {
            //failure!
        }
    }
}
#pragma strict

import System.Collections.Generic;

public class SomeOtherClass extends MonoBehaviour
{
    function Start ()
    {
        // This is how you create a Dictionary. Notice how this takes
        // two generic terms.  In this case you are using a string and
        // a BadGuy as your two values.
        var badguys = new Dictionary.<String, BadGuy>();

        var bg1 = new BadGuy("Harvey", 50);
        var bg2 = new BadGuy("Magneto", 100);

        // You can place variables into the Dictionary with the Add method.
        badguys.Add("gangster", bg1);
        badguys.Add("mutant", bg2);

        var magneto = badguys["mutant"];

        var temp = null;

        // This is a safer, but slow, method of accessing values in a dictionary.
        // Unityscript dictionaries do not support out parameters like C#, so
        // TryGetValue is not available, this is equivalent.
        if (badguys.ContainsKey("birds"))
        {
            temp = badguys["birds"];
        }
        else
        {
            // Failure!
        }
    }
}
import UnityEngine
import System.Collections
import System.Collections.Generic


public class SomeOtherClass(MonoBehaviour):

    private def Start():
        //This is how you create a Dictionary. Notice how this takes
        //two generic terms. In this case you are using a string and a
        //BadGuy as your two values.
        badguys as Dictionary[of string, BadGuy] = Dictionary[of string, BadGuy]()
        
        bg1 = BadGuy('Harvey', 50)
        bg2 = BadGuy('Magneto', 100)
        
        //You can place variables into the Dictionary with the
        //Add() method.
        badguys.Add('gangster', bg1)
        badguys.Add('mutant', bg2)
        
        magneto as BadGuy = badguys['mutant']
        
        temp as BadGuy = null
        
        //This is a safer, but slow, method of accessing
        //values in a dictionary.
        if badguys.TryGetValue('birds', temp):
            pass
        else:
            pass
            //success!
            //failure!

Related documentation

Scripting

  1. Scripts as Behaviour Components
  2. Variables and Functions
  3. Conventions and Syntax
  4. C# vs JS syntax
  5. IF Statements
  6. Loops
  7. Scope and Access Modifiers
  8. Awake and Start
  9. Update and FixedUpdate
  10. Vector Maths
  11. Enabling and Disabling Components
  12. Activating GameObjects
  13. Translate and Rotate
  14. Look At
  15. Linear Interpolation
  16. Destroy
  17. GetButton and GetKey
  18. GetAxis
  19. OnMouseDown
  20. GetComponent
  21. Delta Time
  22. Data Types
  23. Classes
  24. Instantiate
  25. Arrays
  26. Invoke
  27. Enumerations
  28. Switch Statements
  1. Properties
  2. Ternary Operator
  3. Statics
  4. Method Overloading
  5. Generics
  6. Inheritance
  7. Polymorphism
  8. Member Hiding
  9. Overriding
  10. Interfaces
  11. Extension Methods
  12. Namespaces
  13. Lists and Dictionaries
  14. Coroutines
  15. Quaternions
  16. Delegates
  17. Attributes
  18. Events
  1. Building a Custom Inspector
  2. The DrawDefaultInspector Function
  3. Adding Buttons to a Custom Inspector
  4. 基本エディターツールの作成
  1. MonoDevelop's Debugger
  2. Good Coding Practices in Unity
  3. Unity Editor Extensions – Menu Items
  4. Creating Meshes
  1. AssetBundles and the AssetBundle Manager
  2. Mastering Unity Project Folder Structure - Version Control Systems
  1. Installing Tools for Unity Development
  2. Building your first Unity Game with Visual Studio
  3. Editing Unity games in Visual Studio
  4. Debugging Unity games in Visual Studio
  5. Graphics debugging Unity games in Visual Studio
  6. Taking Unity games to Universal Windows Platform
  7. Testing Unity games on Android in Visual Studio
  1. Scripting Primer and Q&A
  2. Scripting Primer and Q&A - Continued
  3. Scripting Primer and Q&A - Continued (Again)
  4. Persistence - Saving and Loading Data
  5. Object Pooling
  6. Introduction to Scriptable Objects
  7. How to communicate between Scripts and GameObjects
  8. Coding in Unity for the Absolute Beginner
  9. Sound Effects & Scripting
  10. Editor Scripting Intro
  11. Writing Plugins
  12. Property Drawers & Custom Inspectors
  13. Events: Creating a simple messaging system
  14. Using Interfaces to Make a State Machine for AI
  15. Ability System with Scriptable Objects
  16. Character Select System with Scriptable Objects
  1. Intro and Setup
  2. Data Classes
  3. Menu Screen
  4. Game UI
  5. Answer Button
  6. Displaying Questions
  7. Click To Answer
  8. Ending The Game and Q&A
  1. Intro To Part Two
  2. High Score with PlayerPrefs
  3. Serialization and Game Data
  4. Loading Game Data via JSON
  5. Loading and Saving via Editor Script
  6. Game Data Editor GUI
  7. Question and Answer
  1. Overview and Goals
  2. Localization Data
  3. Dictionary, JSON and Streaming Assets
  4. Localization Manager
  5. Startup Manager
  6. Localized Text Component
  7. Localized Text Editor Script
  8. Localization Q&A
  1. Introduction and Session Goals
  2. Particle Launcher
  3. Particle Collisions
  4. ParticleLauncher Script
  5. Particle Collisions and Scripting
  6. Random Particle Colors
  7. Drawing Decals with Particles
  8. Collecting Particle Information For Display
  9. Displaying Particles Via Script
  10. Droplet Decals
  11. Questions and Answers