Logo

C#数组和集合

photo

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)

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

留言板

发表回复

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

热门文章

Windows Server IIS+ARR反向代理(配置反向代理服务器) 1.概念说明:反向代理反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相...WindowsServerIIS+ARR反向代理(配置反向代理服务器) 作者:Pastore Antonio
1575 浏览量
一个不可思议的一天 上周五可以说是我人生中的梦魇……因为时间没安排好,为了一个10几分钟的会议,打的花了100多。然...一个不可思议的一天 作者:Pastore Antonio
1567 浏览量
ffmpeg 生成水印 1:先要配置ffmpeg的滤镜:参考:https://www.jianshu.com/p/9d24...ffmpeg生成水印 作者:Pastore Antonio
1504 浏览量
C#中List的FindAll方法的正确打开方式 初略的介绍一种常见的List写法,这种写法在3.0以后其实是很简单的,但是在2.0左右的系统运用中还...C#中List的FindAll方法的正确打开方式 作者:Pastore Antonio
1465 浏览量
IntelliJ IDEA 代码字体大小的快捷键设置放大缩小(很实用)(图文详解) 这是在设置IntelliJIDEA...IntelliJIDEA代码字体大小的快捷键设置放大缩小(很实用)(图文详解) 作者:Pastore Antonio
1458 浏览量