- Home /
Copying multidimensional lists [SOLVED]
I was wondering how you would copy multidimensional lists so that one could be altered and the other not. I want to do something like this:
public class MultidimensionalLists : MonoBehaviour
{
private List<List<int>> list1;
private List<List<int>> list2;
private void Start()
{
list1 = new List<List<int>> { new List<int> { 0, 1, 2, 3 } };
list2 = new List<List<int>> { new List<int> { 3, 2, 1, 0 } };
list2.Clear();
list2.AddRange(list1);//set list2 to list1
//print list2[0], prints 0 1 2 3
string result = "";
foreach (var item in list2[0])
{
result += item.ToString() + " ";
}
Debug.Log(result);
list1[0].Clear();//clear list1[0]
//print list2[0], prints a cleared list (nothing)
result = "";
foreach (var item in list2[0])
{
result += item.ToString() + " ";
}
Debug.Log(result);
}
}
The problem is that when I clear list1[0], list2[0] clears as well.
Answer by Insok · Nov 22, 2020 at 02:46 PM
Hey Noah,
What you are looking for is a way to deep clone a List (instead of shallow cloning).
A handy tool for this are extension methods, make a new script (e.g. "Extensions") with the following code:
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public static class Extensions
{
public static T DeepClone<T>(this T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
}
Now you can use syntax like this:
newList = oldList.DeepClone();
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
List of Transforms updating all items when adding variable. 1 Answer
How to compare a string in a list with a gameobject.name from another list of gameobjects 1 Answer
Copy of List with scriptableObjects? 0 Answers
Why the List in the class when using it is not the same in another class ? 1 Answer