=では配列とリストをコピーできない
//参照のコピー
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を渡すことで、値のみのコピーをすることが出来ます!
まとめ
配列とリストは、クラス同様=で値をコピーすることは出来ません。これを勘違いしていると、意図していないところで、配列の内容を変更してしまって、バグの原因となってしまうので、気を付けましょう!
お疲れさまでした!