Array数组
一维数组
- 语法
第一种:声明数组长度,但是先不赋值
int[] array = new int[5];
// 此数组包含从 array[0] 到 array[4] 的元素。 new 运算符用于创建数组并将数组元素初始化为它们的默认值。 在此例中,所有数组元素都初始化为零。
第二种:声明数组时将其初始化
int[] array1 = new int[] { 1, 3, 5, 7, 9 };
可以用简写
int[] array2 = { 1, 3, 5, 7, 9 };
第三种:可以声明一个数组变量但不将其初始化
int[] array3;
array3 = new int[] { 1, 3, 5, 7, 9 }; // OK
//array3 = {1, 3, 5, 7, 9}; // Error
值类型数组和引用类型数组
SomeType[] array4 = new SomeType[10];
- 方法
修改数组中某个元素的值
int[] numbers = new int[6];
第一种:numbers.SetValue(200, 0);
第二种: numbers[0] = 200;
数组的遍历
int[] numbers = new int[6];
numbers.SetValue(200, 0);
numbers[1] = 300;
for (int i = 0; i < numbers.Length; i++)
{
System.Console.WriteLine(numbers[i]);
}
foreach (var item in collection)
{
}
- 注意点
如果数组的数据类型被固定了,那么在赋值的时候,就只能赋值该数据类型的值。
初始化后,数组的长度不可以再修改了
因此:C#中,不能随意改变数组的长度。C#中,不能随意删除一个数组的元素。
二维数组与多维数组
- 语法
数组可以具有多个维度。
第一种:声明数组长度,但是先不赋值
nt[,] array = new int[4, 2];
int[, ,] array1 = new int[4, 2, 3];
第二种:不设置级别说明符(数组长度),直接赋初始值
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
int[, ,] array3D = { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };
第三种:既设置长度也赋初始值
int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
string[,] array2Db = new string[3, 2] { { "one", "two" }, { "three", "four" }, { "five", "six" } };
例子2:
int[, ,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };
声明一个数组变量但不将其初始化,必须使用 new 运算符将一个数组分配给此变量。
int[,] array5;
array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK
//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error
- 方法
获取多维数组的长度
Array.Length
获取多维数组的维度
Array.Rank
获取多维数组中某个元素的值
修改数组中某个元素的值
在这里第一个值,是你要设置的值,后面的几个值,是表示这个值在数组中的坐标
数组的遍历
int[,] array3 = { { 1, 11, 12, 13, 14 }, { 2, 21, 22, 23, 24 } };
for (int i = 0; i < array3.Rank; i++)
{
for (int j = 0; j < 5; j++)
{
Console.WriteLine(array3[i,j]);
}
}
foreach (var item in array3)
{
Console.WriteLine(item);
}
int[,,] array6 = {
{
{1,2,3 },{4,5,6 }
},
{
{11,12,13 },{14,15,16 }
}
};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
for (int p = 0; p < 3; p++)
{
Console.WriteLine(array6[i,j,p] + "雷潮教育");
}
}
}
交错数组
- 语法
// 第一种声明方式
int[][] numbers = new int[2][];
// 初始化
numbers[0] = new int[5];
numbers[1] = new int[4];
// 赋值
numbers[0][0] = 1;
numbers[0][1] = 2;
numbers[0][2] = 3;
numbers[0][3] = 4;
numbers[0][4] = 5;
numbers[1][0] = 0;
numbers[1][1] = 1;
numbers[1][2] = 2;
numbers[1][3] = 3;
// 第二种声明方式 声明的过程中初始化
int[][] numbers1 = new int[][] {
new int[4],
new int[5]
};
// 赋值
numbers1[0][0] = 1;
numbers1[0][1] = 2;
numbers1[0][2] = 3;
numbers1[0][3] = 4;
numbers1[1][0] = 1;
numbers1[1][1] = 2;
numbers1[1][2] = 3;
numbers1[1][3] = 4;
numbers1[1][4] = 5;
// 第三种声明方式 初始化完成的时候赋值
int[][] numbers2 = {
new int[]{1,2,3,4},
new int[]{ 0,1,2,3,4}
};
- 方法
获取长度
numbers2.Length
遍历
for (int i = 0; i < numbers2.Length; i++)
{
for (int j = 0; j < numbers2[i].Length; j++)
{
Console.Write("{0}{1}", numbers2[i][j], j == (numbers2[i].Length - 1) ? "" : " ");
}
}
// 声明
int[][,] number3 = new int[2][,];
number3[0] = new int[,] { { 1, 2, 3 }, { 3, 4, 5 } };
number3[1] = new int[,] { { 44, 55 } };
// 获取交错数组的长度
Console.WriteLine(number3.Length);
// 遍历复杂的交错数组
for (int i = 0; i < number3.Length; i++)
{
foreach (var item in number3[i])
{
Console.WriteLine(item);
}
}
ArrayList 集合
- 语法
很多数据的一个集合,长度可以改变,类型随便
using System.Threading.Tasks;
ArrayList list = new ArrayList();
-
方法
添加元素(object)
list.Add()
list.AddRange(new string[]{"jiaoyu","leichao","lisi","str","2"})
获取集合元素个数
list.count
删除元素
list.Clear()
删除某个元素
list.Remove(某个元素);
list.RemoveAt(元素下标)
移除一定范围的元素
list.RemoveRange(0,2)
升序排列
list.Sort()
反转
list.Reverse()
插入
list.Insert()
在指定位置插入集合
list.InsertRange()
判断是否包含某个指定元素
list.Contains(1);
关于集合的长度
count 表示这个集合中实际包含的元素的个数
capcity 表示这个集合中可以包含的元素的个数 -
集合特点
每次超过集合所容纳的空间,集合就会向系统索要多一倍的内存空间。
集合中有对象,打印的是所在的命名空间 -
练习
ArrayList list = new ArrayList();
Person p = new Person();
list.Add(p)
创建一个集合,添加数据,求平均值与和
写一个集合,要求随机存放10个数字,所有的数字不重复
Dictionary(字典)
- 语法
System.Collections.Generic(程序集:mscorlib)
// 以 key 的类型为 int , value的类型为string 为例
Dictionary<int,string>myDictionary=newDictionary<int,string>();
- 方法
添加元素
myDictionary.Add(1,"C#");
myDictionary.Add(2,"C++");
myDictionary.Add(3,"ASP.NET");
myDictionary.Add(4,"MVC");
通过Key查找元素
if(myDictionary.ContainsKey(1))
{
Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
}
通过KeyValuePair遍历元素
foreach(KeyValuePair<int,string>kvp in myDictionary)
...{
Console.WriteLine("Key = {0}, Value = {1}",kvp.Key, kvp.Value);
}
仅遍历键 Keys 属性
Dictionary<int,string>.KeyCollection keyCol=myDictionary.Keys;
foreach(intkeyinkeyCol)
...{
Console.WriteLine("Key = {0}", key);
}
仅遍历值 Valus属性
Dictionary<int,string>.ValueCollection valueCol=myDictionary.Values;
foreach(stringvalueinvalueCol)
...{
Console.WriteLine("Value = {0}", value);
}
通过Remove方法移除指定的键值
myDictionary.Remove(1);
if(myDictionary.ContainsKey(1))
...{
Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
}
else
{
Console.WriteLine("不存在 Key : 1");
}
HashTable(键值对集合,字典的升级版
)
- 语法
using System.Collections;
Hashtable hs = new Hashtable();
hs.Add(1, "雷潮");
hs.Add(2, "True");
hs.Add(3, "教育");
hs.Add("name","文丽");
- 方法
遍历
foreach (var item in hs.Keys)
{
Console.WriteLine(item);
}
这种方法可以插入数据
hs[5] = "雷潮教育"
判断是否包含某个键值
hs.ContainsKey("深圳")
修改某个键值的值
hs[键值对] = 具体的值
清空集合
hs.Clear()
删除某个值
hs.Remove()
Stopwatch sw = new Stopwatch
sw.start();
// for循环与foreach
sw.stop();
List(泛型集合)
- 语法
List<Int> list = new List<int>();
- 方法
添加元素
list.Add()
添加集合元素
list.AddRange(objct[] item)
将泛型集合换为数组
list.ToArray();
- 遍历
for(int i = 0,i < list.Count;i++)
{
Console.WriteLine(list[i])
}
网友评论