c#的数组

数组的声明,指定数组大小后,如果不复制数值中所有的元素,就不能重新设置数组的大小

在这里插入图片描述

声明引用类型的数组

public class Person
{

    public string name;
    
    public Person(string name)
    {
        this.name = name;
    }
}

public class Test : MonoBehaviour
{
    private Person[] p = new Person[2];
    //数组中的元素是引用类型,就必须为每个数组元素分配内存
    private Person[] p2 =
    {
        new Person("ss"),
        new Person("aa")
    };

二维数组和三维数组

 //尚未赋值的二维数组
    private int[,] two = new int[3, 3];
    //数组索引器初始化二维数组
    private int[,] twoindex =
    {
        {1, 2},
        {2, 4}
    };
    //三维数组
    private int[,,] three =
    {
        {{1,2},{3,5}},
        {{2,3},{3,6}}
    };

锯齿数组(交错数组),锯齿数组与二维数组混合

  //锯齿数组,在锯齿数组中,每一行都可以有不同的大小
    int[][] jaggedArray2 = new int[][]
    {
        new int[] { 1, 3, 5, 7, 9 },
        new int[] { 0, 2, 4, 6 },
        new int[] { 11, 22 }
    };
    
    int[][] jaggedArray3 =
    {
        new int[] { 1, 3, 5, 7, 9 },
        new int[] { 0, 2, 4, 6 },
        new int[] { 11, 22 }
    };
    
    //锯齿数组和二维数组交替使用
    int[][,] jaggedArray4 = new int[3][,]
    {
        new int[,] { {1,3}, {5,7} },
        new int[,] { {0,2}, {4,6}, {8,10} },
        new int[,] { {11,22}, {99,88}, {0,9} }
    };
    private void Start()
    {
        print(jaggedArray4[0][1, 0]); //5  
    }

复制数组,浅层复制和深层复制

//复制数组
   //因为数组是引用类型,所以将一个数组变量赋予另一个数组变量,就会得到两个引用同一数组的变量。而复制数组
   //会使数组实现ICloneable,这个接口定义的Clone()方法会创建数组的浅表副本
   private int[] a = {1, 2};
   private int[] b = new int[2];
   private void Start()
   {
       b = a;
       a[1] = 3;
       print(b[1]); //直接等于共用的是一个内存  结果为3
       b = (int[])a.Clone();
       a[1] = 4;
       print(b[1]);//使用Clone方法,值类型会重新复制一份,但引用类型仍然共用 结果为4,不受A数组值变化的影响
       //要想实现包含引用类型的数组的深层副本,就必须迭代数组并创建新对象
   }

foreach语句

//IEnumerator接口
   //IEnumerator定义了Current属性,来返回光标所在的元素,该接口的MoveNext()方法移动到集合的下一个元素上。如果有则返回True,否则返回False
   //Foreach转换为IEnumerator接口的方法和属性
   private static List<p> listP = new List<p>(); 
   class  p
   {
   }
   
   private IEnumerator<p> _enumerator = listP.GetEnumerator();
   
   private  void Go()
   {
       while (_enumerator.MoveNext())
       {
           p p = _enumerator.Current;
       }
    
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值