-
- 数组概述
数组从字面上理解就是存放一组数,但在 C# 语言中数组存放的并不一定是数字,也可以是 其他数据类型。
数组的特点:
1.在一个数组中存放的值都是同一数据类型的。
2.数组中某个指定的元素是通过索引来访问的。
3.所有的数组都是由连续的内存位置组成的。
4.数组从零开始建立索引,即数组索引从零开始。
-
- 一维数组的创建、一维数组的初始化、一维数组的使用
一维数组
一维数组在数组中最常用,即将一组值存放到一个数组中,并为其定义一个名称,通过数组中元素的位置来存取值。
定义一维数组的语法形式如下:
1 //定义数组
2 数据类型[] 数组名;
1 //初始化数组中的元素
2 数据类型[] 数组名 = new 数据类型[长度];
3 数据类型[] 数组名 = {值 1, 值 2, ...}
4 数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,...}
举例如下:
int[] i = {1,2,3,6,5,4,7,8,9 };
for (int i1 = 0; i1 < i.Length; i1++)
{
MessageBox.Show(i[i1].ToString());
}
-
- 多维数组的创建、多维数组的初始化、多维数组的使用
多维数组是指二维或二维以上的数组。一般我们最常用的是二维数组。
定义多维数组的语法形式如下。
1 //定义多维数组
2 数据类型[ , , ...] 数组名;
1 //创建多维数组并初始化
2 数据类型[ , , ...] 数组名 = new 数据类型[m,n,...] { { , , ...},{ , , ...}};
从上面定义的语法可以看出,它与一维数组的定义非常类似,每多一个维度则定义时的[]中增加一个“,”。
存取数组中的值也是将下标用“,”隔开。
多维数组初始化:
int[,] arr = new int[2,2];//若不置顶初始值,那么每个元素编译器会提供默认值0
int[,] arr1 = new int[2, 2] { { 1, 1 }, {2,2 } };//若置顶初始值,那么每个元素都要指定
int[,] arr2 = new int[,] { { 1, 1 }, { 2, 2 } };//指定初始值后长度可以省略
举例如下:
for (int i2 = 0; i2< arr2.GetLength(0); i2++)
{
for (int i3 = 0; i3 < arr2.GetLength(1); i3++)
{
MessageBox.Show(arr2[i2,i3].ToString());
}
-
- 数组的基本操作
- 遍历数组
foreach 循环用于列举出集合中所有的元素,foreach 语句中的表达式由关键字 in 隔开的两个项组成。
in 右边的项是集合名,in 左边的项是变量名,用来存放该集合中的每个元素。
该循环的运行过程如下:
每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号的整个表达式返回值为 true,foreach 块中的语句就能够执行。
一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转到 foreach 块后面的执行语句。
具体的语法形式 如下:
1 foreach(数据类型 变量名 in 数组名
2 {
3 //语句块;
4 }
注意:foreach 语句仅能用于数组、字符串或集合类数据类型。
举例如下:使用foreach遍历上一节中的数组
foreach (var item in arr2)
{
MessageBox.Show(item.ToString());
}
- 添加/删除数组元素
- 添加
int count = 8;
int value = 10;
int index = 5;
int[] arr = new int[] { 5, 6, 7, 8, 9, 1, 2, 3, 0, 0, 0, 0, 0 };
if (arr.Length == count)//判断数组长度是否等于8
{
int[] brr = new int[arr.Length * 2];//如果等于8,那么创建一个新数组,长度是原数组的二倍
for (int i = 0; i < arr.Length; i++)//遍历数组将数值传入新数组
{
brr[i] = arr[i];
}
arr = brr;//将新的数组传给旧数组 使得就数组变长
}
//7 5 --
for (int j = count - 1; j >= index; j--)//
{
arr[j + 1] = arr[j]; //将arr索引7的值给索引8
} //将arr索引6的值给索引7
//将arr索引5的值给索引6
arr[index] = value; //将value值10赋给arr数组索引5的值
}
-
- 删除
int[] arr1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
if (count - 1 == index)
{
count--;
}
else
{
for (int j = index + 1; j < arr1.Length; j++)//j初始值5 小于等于10 只有五个值
{
arr[j - 1] = arr[j]; //用索引5的值赋给索引4的值 相当于删除索引4的值
}
count--;
}
- 对数组进行排序
- 快速排序法(利用由CLR提供的算法自动升序排序)
Array.Sort(arr); //由CLR提供的算法
for (int i = 0; i < arr.Length; i++)
{
MessageBox.Show(arr[i].ToString());
}
for (int j = 0; j < arr.Length - 1; j++)
{
for (int i = 0; i < arr.Length - 1; i++)
{
if (arr[i] > arr[i + 1])
{
int temp = arr[i];//互相置换
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
- 数组的合并与拆分
合并:
int[] arr3 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int[] arr4 = new int[] { 11, 21, 31, 14, 51, 61, 17, 18, 19, 10 };
int[] result = new int[arr3.Length + arr4.Length];
arr3.CopyTo(result, 0);
arr4.CopyTo(result, arr3.Length);
for (int i = 0; i < result.Length; i++)
{
MessageBox.Show("result数组值:" + result[i].ToString());
}
拆分:
int[] result1 = new int[arr4.Length /2];
int[] result2 = new int[arr4.Length / 2];
for (int i = 0; i < arr4.Length; i++)
{
if (i<=4)
{
result1[i] = arr4[i];
MessageBox.Show("result1索引:"+i+"的值为:"+result1[i]);
}
else
{
result2[i-5] = arr4[i];
MessageBox.Show("result2索引:" + i + "的值为:" + result2[i-5]);
}
}
-
- ArrayList 类
- ArrayList 类概述
- 它表示可以单独编制索引的对象的有序集合。它基本上是一个数组的替代品。但是,与数组不同,可以使用索引来从列表中指定位置添加和删除项目,并且数组自动调整大小。它还允许动态内存分配,添加,搜索和排序列表中的项目。
- ArrayList元素的添加
有两种方法可用于向ArrayList添加元素:Add和AddRange。
—Add方法将单个元素添加到列表的尾部。
—AddRange方法获取一个实现ICollection接口的集合实例,例如Array、Queue、Stack等,并将这个集合实例按顺序添加到列表的尾部。
ArrayList定义的Add方法语法如下:
public int Add(object value);
//参数:value:需要添加到ArrayList中的值。
参数value是添加的元素,这些元素不管什么数据类型,都会被转换为Object类型后保存。此方法返回值为整型数据,用于返回添加元素索引,添加的元素将插入ArrayList集合的末尾处。
AddRange方法可以一次添加几个元素。此方法定义语法如下:
public void AddRange(objcet[] value);
可以理解为添加一个Objcet类型的数组到ArrayList中。
注意:ArrayList接受null值并且允许元素重复。
下面代码演示了如何添加集合元素。
ArrayList arr = new ArrayList(20);
//使用ArrayList的Add方法添加集合元素
arr.Add("我是元素一");
arr.Add("我是元素二");
arr.Add("我是元素三");
arr.Add("我是元素四");
string[] strs = { "我是元素五", "我是元素六", "我是元素七", "我是元素八" };
//使用AddRange方法添加实现了ICollections接口的集,并按集合参数中元素的顺序添加
arr.AddRange(strs);
foreach (string str in arr)
{
MessageBox.Show(str);
}
- ArrayList 元素的删除
ArrayList类中元素的删除有以下四种方法:
1.ArrayList变量名.Remove(要删除的值);
arr.Remove("我是元素四");
foreach (string str in arr)
{
MessageBox.Show(str);
2.ArrayList变量名.RemoveAt(索引值);
arr.RemoveAt(0);
foreach (string str in arr)
{
MessageBox.Show(str);
}
3.ArrayList变量名.RemoveRange(开始索引值,要删除的个数);
arr.RemoveRange(0, 3);
foreach (string str in arr)
{
MessageBox.Show(str);
}
4.ArrayList变量名.Clear(); //清空。
arr.Clear();
foreach (string str in arr)
{
MessageBox.Show(str);
}
- ArrayList 的遍历与元素查找
/*
思路:
1:创建集合对象
2:往集合中添加字符串对象
3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现
4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
5:遍历集合的通用格式
*/
public class ArrayListTest01 {
public static void main(String[] args) {
//创建集合对象
ArrayList<String> array = new ArrayList<String>();
//往集合中添加字符串对象
array.add("刘正风");
array.add("左冷禅");
array.add("风清扬");
//遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
// System.out.println(array.size());
//遍历集合的通用格式
for(int i=0; i<array.size(); i++) {
String s = array.get(i);
System.out.println(s);
}
}
}
遍历:
foreach语句,object类型
object:ArrayList中存储的类型不一定一支,也不一定能够完全转换,所以为了避免出错,我们采用object类型。
//创建集合对象
ArrayList array = new ArrayList(10);
//往集合中添加字符串对象
array.Add("张三");
array.Add("李四");
array.Add("王五");
//遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
// System.out.println(array.size());
//遍历集合的通用格式
foreach (string str in array)
{
MessageBox.Show(str);
}
//元素的查找
//有三个方法
//在集合中查找字符串
//1.IndexOf(要查找的元素),返回一个索引整数值,如果查找不到,返回-1
MessageBox.Show(array.IndexOf("王五").ToString());
//2.LastIndexOf(要查找的元素)返回一个最后一次出现的索引整型值,否则,返回-1
MessageBox.Show(array.LastIndexOf("张三").ToString());
//3.BinarySearch();查找不到,返回-1 数据类型过多会报异常。
MessageBox.Show(array.BinarySearch("李四").ToString());