スポンサーリンク

【Unity C#】配列とListの中身をコピーする方法

c#

=では配列とリストをコピーできない

//参照のコピー
array_B = array_A;

配列を"="でコピーしようとすると、クラスと同じように値のコピーではなくて参照のコピーとなるため、array_Bの配列の中身を変えると、array_Aの中身も変わってしまいます!

配列のコピー

Array.Copyを使う

using UnityEngine;
using System;  //Arrayクラスを使うために宣言
public class TestClass : MonoBehaviour
{
    private string[] array_A = new string[] {"SLIME","GOBLIN","DRAGON"};

    private string[] array_B;

    private void Start()
    {
        //配列==================================================================================
        array_B = new string[array_A.Length];       //array_A分の領域を確保する

        Array.Copy(array_A,array_B,array_A.Length); //array_Aの中身をarray_Bにコピーする

        array_B[1] = "GHOST";                       //配列の中身を変更する

        //コピー元を表示
        foreach (var item in array_A)
        {
            Debug.Log(item);
        }

        //コピー先を表示
        foreach (var item in array_B)
        {
            Debug.Log(item);
        }
    }
}

forやforeachを使って中身をコピーする方法もありますが、プログラムが長くなるので、あまり使いたくありません。

Array.Copyを使えば、1行で配列の中身をコピーすることが出来ます!

Listのコピー

Listのコンストラクタを使う

using UnityEngine;
using System;
using System.Collections.Generic;  //Listを使うために宣言

public class TestClass : MonoBehaviour
{

    private List<string> list_A = new List<string>() { "SLIME", "GOBLIN", "DRAGON" };

    private List<string> list_B;


    private void Start()
    {
        //リスト==================================================================================
        list_B = new List<string>(list_A);  //list_Aの値をlist_Bにコピーする

        list_B[1] = "GHOST";                //リストの中身を変更する

        //コピー元を表示
        foreach (var item in list_A)
        {
            Debug.Log(item);
        }

        //コピー先を表示
        foreach (var item in list_B)
        {
            Debug.Log(item);
        }
    }
}

Listのコピーは、初期化時のコンストラクタの引数、コピーしたいListを渡すことで、値のみのコピーをすることが出来ます!

まとめ

配列とリストは、クラス同様=で値をコピーすることは出来ません。これを勘違いしていると、意図していないところで、配列の内容を変更してしまって、バグの原因となってしまうので、気を付けましょう!

お疲れさまでした!

タイトルとURLをコピーしました