测试结构的代码编辑步骤为:先实例化该结构,确定类型和名称,以及必须要写入的值,一般为空,例如输入最大表长。然后用名称引用方法输入数据,改变数据,在测试是否真的传入以及结构的正确性,注意头节点的处理*。
代码例如:
TestList<string> test = new TestList<string>(); void Start () { test.Add ("w"); test.Add ("o"); test.Add ("r"); test.Add ("l"); test.Add ("d"); test.Add ("!"); print(test.Count); test.Clear (); test.Add ("o"); test.Insert (0, "are"); test.Add ("k"); test.Add ("!"); test.Insert (2, "you"); print(test.Count); test.RemoveAt (1); print(test.Count); print (test.GetValue (3)); print (test.GetIndex ("k")); print (test.GetIndex ("j")); print ("elements:"); foreach (var i in test) print (i); }
先实例化一个TestList,类型为GameObject,名为obj,然后实例化一个GAmeObject对象cube,再将cube用obj的加入方法加入到单链表中,然后输出表长为1:
1,一种直接destroy cube,再将cube赋值给GameObject实例化的cube2,输出cube2,表长,分别为cube(clond)和1.再调用obj的移除方法,移除cube,输出表长为0。
2,一种在Update中,命令用鼠标左击游戏运行场景后,再destroy cube,再将cube赋值给GameObject实例化的cube2,输出cube2和表长,分别为null和1,再调用obj的移除方法,移除cube,输出表长为0。代码如下
TestList<GameObject>obj = new TestList<GameObject>(); void Start () { GameObject cube = (GameObject)Instantiate (Resources.Load ("Cube")); obj.Add (cube); print (obj.Count); Destroy (cube); } void Update () { if (Input.GetMouseButtonDown (0)) { GameObject cube2 = obj.GetValue(0); print (cube2); print (obj.Count); } }
区别原因:GameObject类型为引用类型,第一种删除时,cube还未真正删除,从obj的数据结构中还能访问的到,过一会后,就彻底删除了,就不能访问的到了,所以赋值为null,但两者都会保留数据结构中的对应的指针域。Remove后就彻底删除了。
在应用List时得到的效果是一样的。