Logo

C#数组和集合

photo
Pastore Antonio

2017年07月25日

1.一维数组:一维数组很简单,值得说明的就是读取数组的方法,foreach方法是很简单的。一维数组的声明、初始化和使用看如下图即可简单明白:

但是需要说明的是,foreach语句声明一个迭代变量,它自动获取数组中的每一个元素的值。但是如果需要采用其它的方法遍历数组或者修改数组的元素,那么就需要使用for语句来遍历,foreach不能对数组中的值进行改变,它获取的是数组中的每个元素的只读副本,不能够进行修改。默认的赋值整型都为零,字符型都为a,字符串型都为空。

2.二维数组:二维数组跟一维数组在声明和初始化时有很大的相同点,输出时是按行输出的。其中,与c和c++比较起来,最大的区别就是动态数组的应用,它能够动态的定义数组。这在c/c++中就需要使用指针才能够完成,因为c#去除了指针,所以应用更加的简单了。

3.排序:关于数组和集合的问题,其中最关键的一个那就是它们的排序问题了。而其中最主要用到的就是遍历排序了。它的方法有:冒泡排序、直接插入排序、选择排序法等。下面就一一对其进行说明。

冒泡排序:冒泡排序就是通过两个for循环,通过比较相邻两个值进行比较,将大的或者小的循环往后移动来达到排序的目的。

具体的实例如下:

直接插入排序:直接插入排序法,其实就是将当前的数,插入前面已经排好的数组中,放在两者之间的方法。如:1,4,8,7,2,3,0;在两位之前的比较是直接进行的,然后对后面的数向左比较,直到放在一个“夹壁”中。比如7就是在4和8之间,那么直接将7插入4和8之间。

具体实例如下:

选择排序:选择排序就更加的好理解,方法跟冒泡排序有些相似。它是将数组遍历一次,选出其中最小的或者最大的放在最前,然后在剩余的数组元素中,再选出最小的或者最大的跟第二位换位置,依次类推,直到最后一个元素。

具体的实例如下:

装的排序方法:使用array类中的sort和reverse方法,可以很简单的对数组进行排序。其中sort方法是对数组进行从小到大的排序,reverse方法是将数组按当前序列反转排序。配合两者,就可以完成从大到小的排序了。

4.合并和拆分:合并和拆分就如字面上的意思一样,合并就是将一维数组合并成一个更大的一维数组或者多维数组。拆分就是做反动作。在其中值得注意的就是,在将一维数组合并成一维数组时,通过for循环和if语句的判断,来衔接不同的一维数组;而在将一维数组合并为多维数组时,通过for循环和switch方法,能够更加简单的完成合并,通过switch方法判断,将不同的一维数组合并到不同的维度当中。拆分的方法正好就跟合并的方法相反,使用的手段和方法是相似的。拆分和合并中,主要记住,if用于判断不同一维界限,switch用于区分不同维度,就行了。

5.arraylist类的使用:arraylist类位于system.collections命名空间下,可以动态的添加和删除元素。arraylist类有很多功能,包括:自动扩充数组容量,提供添加、删除、插入元素的方法,arraylist只能运用于一维数组,不能用于多维数组。

使用add方法可以再arraylist尾部添加新元素,使用insert方法,可以在指定位置后面添加新元素,可以是在0位置后面(即:最前面)添加。在使用insertrange方法添加一个一维数组时,可以在指定位置,直接添加一维数组名即可。注意:使用arraylist类时,必须添加collections命名空间。

使用clear方法,可以移除arraylist中的所有元素。使用remove方法,可以删除arraylist中与指定条件匹配的第一个元素。使用removeat方法可以删除指定索引位置的元素(从零刚开始)。使用removerange方法可以用于移除指定位置开始的一定数量元素。

arraylist的查找方法中,可以使用contains方法判断某个元素是否在集合中,返回true和fault。还有一些与string中的查找方法类似的方法在arraylist方法中也有。并且使用方法一样。

对于arraylist方法的实例如下:

6.哈希表(Hashtable):对于这个,之前基本上没有很刻意的使用过,所以可以说是完全不懂,现在只好从头学了。它的属性和说明如下:

属性值跟说明跟arraylist相似,方法和使用的方法跟arraylist方法也是类似的。哈希表这类似于构建一个表,表达了数据之间的联系。

使用实例如下:

7.比较两个数组的差异:

将DataTable中某一列数据直接转换成数组进行比较,使用的Linq,要引用命名空间using System.Linq;

string[] arrRate = dtRate.AsEnumerable().Select(d => d.Field<string>("arry")).ToArray();//A
string[] arrTemp = dtTemp.AsEnumerable().Select(d => d.Field<string>("arry")).ToArray();//B
 
string[] arrUpd = arrRate.Intersect(arrTemp).ToArray();//相同的数据  (修改)
string[] arrAdd = arrRate.Except(arrTemp).ToArray();//A中有B中没有的  (新增)
string[] arrNew = arrTemp.Except(arrRate).ToArray();//B中有A中没有的  (删除)

例子:

string[] arrRate = new string[] { "a", "b", "c", "d" };//A
string[] arrTemp = new string[] { "c", "d", "e" };//B
 
string[] arrUpd = arrRate.Intersect(arrTemp).ToArray();//相同的数据 (结果:c,d)
string[] arrAdd = arrRate.Except(arrTemp).ToArray();//A中有B中没有的 (结果:a,b)
string[] arrNew = arrTemp.Except(arrRate).ToArray();//B中有A中没有的 (结果:e)
本文为原创文章,请注意保留出处!

留言板

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

修复群晖Synology Drive client右键菜单缺失问题 Local, clean & environmental 作者:Pastore Antonio
1806 浏览量
1779 浏览量
configure: error: Package requirements (oniguruma) were not met Local, clean & environmental 作者:Pastore Antonio
1524 浏览量
Adobe Acrobat Pro 激活 Local, clean & environmental 作者:Pastore Antonio
1519 浏览量
追寻日出,找回自己 Local, clean & environmental 作者:Pastore Antonio
1488 浏览量