C#——数组和集合

1.一维数组

①先声明,再用new运算符进行内存分配

数组元素类型[] 数组名字;

数组名字 = new 数组元素类型[数组元素的个数];

②声明的同时为数组分配内存

数组元素类型[] 数组名 = new 数组元素类型[数组元素的个数];

③一维数组的初始化

int[] arr = new int[]{1,2,3,5,25};

int[]arr2 = {34,23,12,6};

2.二维数组

①二维数组的创建

数组元素类型[,] 数组名字;

②二维数组的初始化

type[,] arrayname = {{value1,value2…valuen},{ value1,value2…valuen }};

3.遍历数组

using System;

class Program

{

    static void Main(string[] args)

    {

       

        //遍历数组

        int[] arr = new int[10] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };

        foreach (int i in arr)

        {

            Console.WriteLine(i);

        }

        Console.ReadLine();

}

}

3.添加/删除数组元素

①添加数组元素——在数组中添加一个元素

static int[] AddArray(int[] ArrayBorn, int Index, int Value)

{

       if(Index >= (ArrayBorn.Length))

       {Index = ArrayBorn.Length – 1;}

       int[] TemArray = new int[ArrayBorn.Length + 1 ];

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

{

       if(Index >= 0)

       {

              if(i < (Index+1))

                     {TemArray[i] = ArrayBorn[i];}

              else if(i == (Index+1))

                     {TemArray[i] = Value;}

              else

                     {TemArray[i] = ArrayBorn[i-1];}

}

else

       {

              if(i==0)

                     {TemArray[i] = Value;}

              else

                     {TemAttay[i] = ArrayBorn[i-1];}

}

}

return TemArray;

}

②添加数组元素——在数组中添加一个数组

static int[] AddArray(int[] ArrayBorn,int[] ArrayAdd,int Index)

{

       if(Index >= (ArrayBorn.Length))

              {Index = ArrayBorn.Length -1;}

       int[] TemArray = new int[ArrayBorn.Length + ArrayAdd.Length];

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

       {

              if(Index >= 0)

                     {

                            if(i<(Index+1))

{TemArray[i]=ArrayBorn[i];}

}

                            else if(i == (Index+1))

                            {

                                   for(int j=0;j<ArrayAdd.Length;j++)

                                          {TemArray[i+j] =ArrayAdd[j];}

                                   i = i+ArrayAdd.Length-1;

}

                            else

                                   {TemArray[i]=ArrayBorn[i-ArrayAdd.Length];}

}

else

       {

              if(i==0)

                     {

                            for(int j=0;j<ArrayAdd.Length;j++)

                                   {TemArray[i+j]=ArrayAdd[j];}

                            i=i+ArrayAdd.Length-1;

}

                     else

                            {TemArray[i]=ArrayBorn[i-ArrayAdd.Length];}

}

return TemArray;

}

③删除数组元素

4.对数组进行排序

Array.Sort()对数组中的元素进行从小到大排序

int[] arr = new int[]{3,9,27,6,18,12,21,5};

Array.Sort(arr);

Array.Reverse()用于反转数组中的元素顺序,这个方法会改变原数组,使其第一个元素变成最后一个,最后一个元素变成第一个

5.数组的合并与拆分

①数组的合并

static void Main(string[] args)

{

       //定义两个一维数组

       int[] arr1 = new int[]{1,2,3,4,5};

       int[] arr2 = new int[]{6,7,8,9,10};

       int n = arr1.Length + arr2.Length;

       int[] arr3 = new int[n];

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

       {

              if(i<arr1.Length)

              {

                     arr3[i] = arr1[i];

}

else {arr3[i] = arr2[i-arr1.Length];}

}

Console.WriteLine(“合并后的一维数组:”);

foreach(int i in arr3) {Console.Write(“{0}”,i+” ”);}

Console.WriteLine();

//两个一维数组合并成一个二维数组

int[,] arr4 = new int[2,5];

for(int i = 0;i<arr4.Rank;i++) //arr.Rank:获取数组arr的维数;

{

       switch(i)

       {

              case 0:

                     {

                            for(int j=0;j<arr1.Length;j++)

{arr4[i,j]= arr1[j];}

                                   break;

}

                     case 1:

                            {

                                   for(int j=0;j<arr2.Length;j++)

{arr4[i,j]= arr1[j];}

                                   break;

}

}

}

Console.WrithLine(“合并后的二维数组:”);

for(int i=0;i<arr4.Rank;i++)

{

       for(int j=0;i<arr4.GetUpperBound(arr4.Rank-1)+1;j++)

       {

              Console.Write(arr[i,j]+” ”);

}

Console.WriteLine();

}

}

②数组的拆分

static void Main(string[] args)

{

       int[,] arr1 = new int[2,3] {{1,3,5},{2,4,6}};

       int[] arr2 = new int[3];

       int[] arr3 = new int[3];

       for(int i=0;i<2;i++)

       {

              for(int j=0;j<3;j++)

              {

                     switch(i)

                            {

                                   case 0: arr2[j] = arr1[i,j]; break;

                                   case 1: arr3[j] = arr1[i,j]; break;

}

}

}

……

}

6.冒泡排序法

基本思想:对比相邻的元素值,如果满足条件就交换元素值。

static void Main(string[] args)

{

       ain[] arr = new int[]{63,4,24,1,3,15};

       int j,temp;

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

{

       j=i+1;

       id:

              if(arr[i]>arr[j])

              {

                     temp = arr[i];

                     arr[i] = arr[j];

                     arr[j] = temp;

                     goto id;

}

else

       if(j<arr.Length-1)

       {

              j++;

              goto id;

}

}

foreach(int n in arr)

{

       Console.Write(n+” ”);

}

Console.WriteLine();

}

//先将最小的数换至最前端,以此类推。

7.直接插入排序

static void Main(string[] args)

{

       int[] arr = new int[]{63,4,24,1,3,15};

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

       {

              int temp = arr[i];

              j=i;

              while((j>0) && (arr[j-1]>temp))

              {

                     arr[j] = arr[j-1];

--j;

}

arr[j] = temp;

}

Console.WriteLine(“排序后结果为:”);

foreach(int n in arr)

{

       Console.Write(“{0}”,n+” ”);

}

Console.WriteLine();

}

8.选择排序法

static void Main(string[] args)

{

       int[] arr = new int[]{63,4,24,1,3,15};

       int min;

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

       {

              min=i;

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

              {

                     if(arr[j]<arr[min]) {min=j;}

}

int t=arr[min];

arr[min]=arr[i];

arr[i]=t;

}

Console.WriteLine(“排序后的结果为:”);

foreach(int n in arr)

{

       Console.Write(“{0}”,n+” ”);

}

Console.WriteLine();

}

9.集合ArrayList类

程序中使用ArrayList类时,需要在命名空间区域添加using System.Collections

可以将ArrayList类看作扩充了功能的数组,但它并不等同于数组。

与数组相比,ArrayList类提供了以下功能:

þ数组的容量是固定的,但是ArrayList的容量可以根据需要自行扩充。

þArrayList提供添加、删除和插入某一范围元素的方法,但在数组中,只能一次获取或者设置一个元素的值。

þArrayList提供将只读和固定大小包装返回集合的方法,而数组不提供。

þArrayList自能是一维形式,而数组可以是多维的。

①默认构造器

public ArrayList();

用以上构造器声明ArrayList

ArrayList List = new ArrayList();

例:

ArrayList List = new ArrayList();

for(int i=0;i<10;i++)

{

       List.Add(i);

}

②用一个ICollection对象来构造,并将该集合的元素添加到ArrayList中

public ArrayList(ICollection);

用以上构造器声明ArrayList

ArrayList List = new ArrayList(arryName);

例:

int[] arr = new int[]{1,2,3,4,5};

ArrayList List = new ArrayList(arr);

③用指定的大小初始化内部的数组

public ArrayList(int);

用以上构造器声明ArrayList

ArrayList List = new ArrayList(n);

例:

ArrayList List = new ArrayList(10);

for(int i=0;i<List.Count;i++){

       List.Add(i);

}

10.ArrayList元素的添加

①Add()方法

将对象添加到ArrayList集合的结尾处

例:

int[] arr = new int[]{1,2,3};

ArrayList List = new ArrayList[arr];

List.Add(4); //则List中为1,2,3,4

②insert()方法

将元素插入ArrayList集合的指定索引处

例:

int[] arr = new int[]{1,2,3,4};

ArrayList List = new ArrayList(arr);

List.Insert(3,7); //3为Index,7为要插入的object

例:使用ArrayList集合记录学生的姓名、性别及出生年月等信息。

using System;

using System.Collections.Generic;

public class Program

{

    public static void Main()

    {

        List<Student> students = new List<Student>();

        students.Add(new Student("张三", "男", new DateTime(1990, 1, 1)));

        students.Add(new Student("李四", "女", new DateTime(1995, 5, 15)));

        // 遍历学生信息

        foreach (var student in students)

        {

            Console.WriteLine($"姓名: {student.Name}, 性别: {student.Gender}, 出生日期: {student.Birthday:yyyy-MM-dd}");

        }

    }

}

public class Student

{

    public string Name { get; set; }

    //完整代码为

    //private string _name;

    //public string Name

    //{

    //    get

    //    {

    //        return _name;

    //    }

    //    set

    //    {

    //        _name = value;

    //    }

    //}

    public string Gender { get; set; }

    public DateTime Birthday { get; set; }

    public Student(string name, string gender, DateTime birthday)

    {

        Name = name;

        Gender = gender;

        Birthday = birthday;

    }

}

10.ArrayList元素的删除

①clear()方法

从ArrayList中移除所有元素

②Remove()方法

用来从ArrayList中移除特定对象的第一个匹配项

例:

int[] arr = new int[]{1,2,3,4,5};

ArrayList List = new ArrayList(arr);

List.Remove(3);

//移除ArrayList对象中与3匹配的元素

③RemoveAt()方法

移除ArrayList的指定索引处的元素

例:

int[] arr = new int[]{1,2,3,4,5};

ArrayList List = new ArrayList(arr);

List.RemoveAt(3);

//移除ArrayList对象中索引为3的元素

④RemoveRange()方法

从ArrayList中移除一定范围的元素

例:

int[] arr = new int[]{1,2,3,4,5};

ArrayList List = new ArrayList(arr);

List.RemoveRange(3,2);

//从索引3处移除2个元素

11.ArrayList的遍历

可以使用foreach进行遍历

12.ArrayList元素的查找

Contains()方法,IndexOf()方法和LastIndexOf()方法

public virtual bool Contains(Object item);

例:

int[] arr = new int[]{1,2,3,4,5};

ArrayList List = new ArrayList(arr);

Console.Write(List.Contains(2)); //判断ArrayList集合中是否包含指定的元素,包含则返回true,否则返回false

13.Hashtable哈希表

表示键/值对的集合,键不能为空引用,但值可以。

①哈希表元素添加

Add()方法

Add(key,value); //key要添加元素的键,value要添加元素的值

例:

Hashtable hashtable = new Hashtable(); //实例化Hashtable对象

hashtable.Add(“id”,”BH0001”); //向Hashtable中添加元素

hashtable.Add(“name”,”TM”);

hashtable.Add(“Age”,”18”);

Console.WriteLine(hashtable.Count); //获得HashTable中的元素个数

②Hashtable元素的删除

clear()方法  移除Hashtable中所有元素

Remove(key)方法   移除Hashtable中对应key键的元素

③Hashtable的遍历

可以使用foreach语句,由于Hashtable中的元素是一个键/值对,因此需要使用DictionaryEntry结构来进行遍历。

foreach(DictionaryEntry dicEntry in hashtable)

{

Console.WriteLine(“\t”+dicEntry.Key+“\t” + dicEntry.Value);

}

④Hashtable元素的查找

Contains()方法

用来确定Hashtable中是否包含特定键

Hashtable hashtable = new Hashtable();

hashtable.Add(“id”, “BH0001”);

Console.WriteLine(hashtable.Contains(“id”)); //包含指定键则返回true,否则返回false

ContainsValue()方法

用来确定Hashtable中是否包含特定值

Hashtable hashtable = new Hashtable();

hashtable.Add(“id”, “BH0001”);

Console.WriteLine(hashtable.Contains(“BH0001”)); //包含指定键值则返回true,否则返回false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值