C# 数组和集合

    1. 数组概述

数组从字面上理解就是存放一组数,但在 C# 语言中数组存放的并不一定是数字,也可以是 其他数据类型。

数组的特点:

1.在一个数组中存放的值都是同一数据类型的。

2.数组中某个指定的元素是通过索引来访问的。

3.所有的数组都是由连续的内存位置组成的。

4.数组从零开始建立索引,即数组索引从零开始。

    1. 一维数组的创建、一维数组的初始化、一维数组的使用

一维数组

一维数组在数组中最常用,即将一组值存放到一个数组中,并为其定义一个名称,通过数组中元素的位置来存取值。

定义一维数组的语法形式如下:

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. 多维数组的创建、多维数组的初始化、多维数组的使用

多维数组是指二维或二维以上的数组。一般我们最常用的是二维数组。

定义多维数组的语法形式如下。

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());

                }

           

    1. 数组的基本操作
  1. 遍历数组

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());

            }

             

  1. 添加/删除数组元素
    1. 添加

             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的值     

        }

    1. 删除

             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--;

            }

  1. 对数组进行排序
    1. 快速排序法(利用由CLR提供的算法自动升序排序)

            Array.Sort(arr);  //由CLR提供的算法

            for (int i = 0; i < arr.Length; i++)

            {

                MessageBox.Show(arr[i].ToString());

              

            }           

    1. 冒泡排序定义双层循环,依次遍历(时间复杂度为n2,空间复杂度为n2)

           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] + " ");

            }

  1. 数组的合并与拆分

合并:

            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]);

                }

            }

    1. ArrayList
  1. ArrayList 类概述
    1. 它表示可以单独编制索引的对象的有序集合。它基本上是一个数组的替代品。但是,与数组不同,可以使用索引来从列表中指定位置添加和删除项目,并且数组自动调整大小。它还允许动态内存分配,添加,搜索和排序列表中的项目。
  2. 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);

            }

  1. 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);

            }

  1. 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类型

objectArrayList中存储的类型不一定一支,也不一定能够完全转换,所以为了避免出错,我们采用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());

猜你喜欢

转载自blog.csdn.net/a296026640/article/details/130746661