3月5日 Array/ArrayList/List
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];
类型 | 初始化方式 | 是否限制存储数据类型 | 长度是否固定 |
---|---|---|---|
Array | string[] a=new string1{"a"} | √ | √ |
ArrayList | ArrayList a=new ArrayList(){1,"2"} | × | × |
List | List<string> a=new List<string>(){"a"} | √ | × |
练习
一. 储物柜 1. 储物格的类有存放和取件两个方法,存放的时候,开门提示输入存放的东西;取件的时候,提示取出了xxx 2. 启动时,输入储物柜的格子总数,进行储物柜的初始化。储物柜的主界面
1.存
2.取
存取时,都要输入储物格,然后再调用对应储物格的存取方法。
二. 储物柜升级版 有两种储物格,分别为大型和小型。做成大储物格和小储物格两种类型 1. 储物格的类有存放和取件两个方法,存放的时候,开门提示输入存放的东西;取件的时候,提示取出了xxx 2. 启动时,分别输入大小储物柜的格子总数,进行储物柜的初始化。储物柜的主界面
1.存
2.取
点存的时候
1.大格
2.小格
根据他的选择为他提供一个储物格并告知储物格号码,如果已经没有可用储物格要提示。