リストとディクショナリ

確認済のバージョン: 4.1

-

難易度: 中級

リストとディクショナリの作成の仕方と使い方を学びます。

リストとディクショナリ

中級 Scripting

BadGuy

Code snippet

using UnityEngine;
using System.Collections;
using System; //これにより、IComparable インターフェースを使用できます

//これは、さまざまな収集した要素を格納するクラスです。
//コレクションの Sort() メソッドを使用するために、
//このクラスには IComparable インターフェースを
//実装する必要があります。
public class BadGuy : IComparable<BadGuy>
{
    public string name;
    public int power;
    
    public BadGuy(string newName, int newPower)
    {
        name = newName;
        power = newPower;
    }
    
       //IComparable インターフェースには
       //このメソッドが必要です
    public int CompareTo(BadGuy other)
    {
        if(other == null)
        {
            return 1;
        }
        
        //power の差を返します
        return power - other.power;
    }
}
#pragma strict

import System;        // これにより、IComparable インターフェースを使用できます

//これは、さまざまな収集した要素を格納するクラスです。
//コレクションの Sort() メソッドを使用するために、
//このクラスには IComparable インターフェースを
//実装する必要があります。
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;
    }

    // IComparable インターフェースにはこのメソッドが必要です
    public function CompareTo (other : BadGuy)
    {
        if (other == null)
        {
            return 1;
        }

        // power の差を返します
        return power - other.power;
    }
}
import UnityEngine
import System.Collections
import System

//これは、さまざまな収集した要素を格納するクラスです。
//コレクションの Sort() メソッドを使用するために、
//このクラスには IComparable インターフェースを
//実装する必要があります。
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

    
    // IComparable インターフェースにはこのメソッドが必要です
    public def CompareTo(other as BadGuy) as int:
        if other is null:
            return 1
        
        //power の差を返します
        return (power - other.power)

SomeClass

Code snippet

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

public class SomeClass : MonoBehaviour
{
    void Start () 
    {
                //これは、リストの構築方法です。
                //型が < > で特定されていることに注目してください。
        List<BadGuy> badguys = new List<BadGuy>();
        
        //ここで、BadGuy を 3 つ、リストに加えます
        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);
        }
        
        //リストをクリアします。
        //ですから、これは空です。
        badguys.Clear();
    }
}
#pragma strict

import System.Collections.Generic;

public class SomeClass extends MonoBehaviour
{
    function Start ()
    {
        //これは、リストの構築方法です。
       //型が < > で特定されていることに注目してください。
        var badguys = new List.<BadGuy>();

        //ここで、BadGuy を3 つ、リストに加えます
        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);
        }

        //リストをクリアします。ですから、これは空です。
        badguys.Clear();
    }
}
import UnityEngine
import System.Collections
import System.Collections.Generic


public class SomeClass(MonoBehaviour):

    private def Start():
       //これは、リストの構築方法です。
       //型が < > で特定されていることに注目してください。
        badguys as List[of BadGuy] = List[of BadGuy]()
        
        //ここで、BadGuy を 3 つ、リストに加えます
        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))
        
                //リストをクリアします。
                //ですから、これは空です。
        badguys.Clear()

SomeOtherClass

Code snippet

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

public class SomeOtherClass : MonoBehaviour 
{
    void Start ()
    {
                //これは、ディクショナリの構築方法です。
                //2 つの generic の型を取ることに注意してください。
                //ここでは、文字列と BadGuy の値を使用します。
        Dictionary<string, BadGuy> badguys = new Dictionary<string, BadGuy>();
        
        BadGuy bg1 = new BadGuy("Harvey", 50);
        BadGuy bg2 = new BadGuy("Magneto", 100);
        
               //Add() メソッドを使ってディクショナリに変数を加えます。
        badguys.Add("gangster", bg1);
        badguys.Add("mutant", bg2);
        
        BadGuy magneto = badguys["mutant"];
        
        BadGuy temp = null;
        
        // ディクショナリ内の値にアクセスするメソッドとして、
        //この方が安全ですが、より時間がかかります
        if(badguys.TryGetValue("birds", out temp))
        {
            //成功!
        }
        else
        {
            //失敗!
        }
    }
}
#pragma strict

import System.Collections.Generic;

public class SomeOtherClass extends MonoBehaviour
{
    function Start ()
    {
                //これは、ディクショナリの構築方法です。
                //2 つの generic の型を取ることに注意してください。
                //ここでは、文字列と BadGuy の値を使用します。
        var badguys = new Dictionary.<String, BadGuy>();

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

        // Add() メソッドを使ってディクショナリに変数を加えます。
        badguys.Add("gangster", bg1);
        badguys.Add("mutant", bg2);

        var magneto = badguys["mutant"];

        var temp = null;

         // ディクショナリ内の値にアクセスするメソッドとして、この方が安全ですが、より時間がかかります。
        // Unity のJavascript のディクショナリは C# のようにパラメータをサポートしません。
        // そのため、TryGetValue を使用できません。以下は同様の処理をします。
        if (badguys.ContainsKey("birds"))
        {
            temp = badguys["birds"];
        }
        else
        {
            // 失敗!
        }
    }
}
import UnityEngine
import System.Collections
import System.Collections.Generic


public class SomeOtherClass(MonoBehaviour):

    private def Start():
                //これは、ディクショナリの構築方法です。
                //2 つの generic の型を取ることに注意してください。
                //ここでは、文字列と BadGuy の値を使用します。
        badguys as Dictionary[of string, BadGuy] = Dictionary[of string, BadGuy]()
        
        bg1 = BadGuy('Harvey', 50)
        bg2 = BadGuy('Magneto', 100)
        
        //Add() メソッドを使ってディクショナリに変数を加えます。
        badguys.Add('gangster', bg1)
        badguys.Add('mutant', bg2)
        
        magneto as BadGuy = badguys['mutant']
        
        temp as BadGuy = null
        
        // ディクショナリ内の値にアクセスするメソッドとして、
        //この方が安全ですが、より時間がかかります
        if badguys.TryGetValue('birds', temp):
            pass
        else:
            pass
            //成功!
            //失敗!