3月5日 Array/ArrayList/List

Profile Picture
- Published on Mar 5, 2020🌏 Public

Array / ArrayList / List

1. 数据的装箱和拆箱

C#中,所有类型继承的根源都是Object类型,所以我们可以把任何的数据,存储到Object类型的变量上。

在需要的时候,还可以通过显式转换,转回原来的类型

    //装箱
    Object o = cat;  
    //拆箱
    Cat c = (Cat)o; //必须保证可以转成Cat,后则运行过程中会报错

Array 数组

Array是一个固定长度的数组,只能存放固定的数据类型。

创建一个Array

      static void Main(string[] args)
        {
            //创建一个长度为10的字符串数组
            string[] a = new string[10];
            a[0] = "1";
            a[1] = "2";

            //直接在创建时赋值,会根据数据有多少项去确定长度
            string[] b = new string[] { "1", "2", "3" };


            //结合,可以避免初始数据漏写
            string[] c = new string[5] { "1", "2", "3" ,"4" ,"5"};

            //数字数组
            int[] d = new int[1];

            //Cat类型的数组
            Cat[] e = new Cat[] { new Cat() ,new Cat() }; 
        }
        class Cat { }

赋值、for循环、遍历、判断是否存在某个值

            //创建一个长度为10的字符串数组
            string[] a = new string[10];
            int length= a.Length; //数组的长度
            for (int i = 0; i < length; i++)
            {
                a[i] = (i + 1).ToString();
            }

            foreach (var item in a)
            {
                //item就是数组中的一项数据
                Console.WriteLine(item);
            }

            //判断是否包含字符串“1”
            Console.WriteLine(a.Contains("11"));

ArrayList

可变长度,并且可以存放任何数据类型,存入时,会自动进行装箱操作。再取出来的时候,得到的是一个Object类型的数据。

 //创建一个ArrayList
ArrayList arrayList = new ArrayList();
//创建时赋值的方式
ArrayList arrayList2 = new ArrayList() { 1, 2, 3, "1", 1d, 1m };

arrayList.Add("1"); // Add,往队尾添加数据
arrayList.Add("2"); 
arrayList.Add("3"); // ["1","2","3"]
arrayList.Insert( 1,"a"); //["1","a","2","3"]  插队
arrayList[1] = "aa";  //["1","aa","2","3"]   修改
arrayList.RemoveAt(0); // ["aa","2","3"]  根据提供的索引值删除对应位置数据
arrayList.Remove("aa"); //["2","3"]  删除匹配到的第一个数据

    var count=arrayList.Count;  //数据长度
for (int i = 0; i < count; i++)
{
    arrayList[i] = i;
}

//取用数据,要进行判断,确认数据类型后,才进行转换,以保证不会出错
var type = arrayList[0].GetType();
if (type.FullName == "System.Int32")
{
    //判定为Int32类型,正常进行转换
    int num = (int)arrayList[0];
}

List 泛型列表

泛型列表的长度是可变的,存储的数据类型是固定的。他是我们在C#开发中最常用的一种列表类型。

//List<类型> 变量名 =new List<类型>();
List<string> list = new List<string>();
//赋初值
List<string> list2 = new List<string>() {"1","2","3" };
//其他使用更ArrayList一模一样,只是取用数据更加方便,因为列表中存储的都是字符串值
string a= list2[1];
类型初始化方式是否限制存储数据类型长度是否固定
Arraystring[] a=new string1{"a"}
ArrayListArrayList a=new ArrayList(){1,"2"}××
ListList<string> a=new List<string>(){"a"}×

练习

一. 储物柜 1. 储物格的类有存放和取件两个方法,存放的时候,开门提示输入存放的东西;取件的时候,提示取出了xxx 2. 启动时,输入储物柜的格子总数,进行储物柜的初始化。储物柜的主界面

1.存
2.取

存取时,都要输入储物格,然后再调用对应储物格的存取方法。

二. 储物柜升级版 有两种储物格,分别为大型和小型。做成大储物格和小储物格两种类型 1. 储物格的类有存放和取件两个方法,存放的时候,开门提示输入存放的东西;取件的时候,提示取出了xxx 2. 启动时,分别输入大小储物柜的格子总数,进行储物柜的初始化。储物柜的主界面

1.存
2.取

点存的时候

1.大格
2.小格

根据他的选择为他提供一个储物格并告知储物格号码,如果已经没有可用储物格要提示。