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