这一篇,我们来看C#中的数组。

1. 数组的概念

  数组:存储相同类型多个数据元素的容器

  数组的声明和初始化: 在创建数组的时候,必须指定数组的长度

            int[] nums = new int[];
int[] nums1 = { ,, };
int[] num2 = new int[] { , , };//数组元素的个数必须与声明的个数一致
//int[] nums3 = new int[5] { 5, 3, 8 }; //错误
int[] nums4 = new int[] { , , }; //正确,可以省略数组的个数

   声明了数组,但未对数组元素进行赋值,如果是int类型,则数组里面的所有元素的值都是0;如果是string类型,则数组里面所有元素的值都是null。如果你声明了一个长度为5的int类型的数组,只想对其中的1个元素赋值,那么必须在声明之后,对这个元素进行单独的赋值操作。

2. 对数组的操作

  1.  访问数组中的元素

    我们可以使用索引器来访问指定编号位置的数组,访问数组元素:num[0]、num[1], 索引从0开始。

   2.  取数组的长度

     数组名.Length         int len = nums.Length;

     数组的长度不能被修改,若要修改,必须重新创建一个数组。

     string[]  arrScore=new  string[5];  arrScore =new  string[7];

  (1) string[]  arrScore=new  string[5];

a)左边:string[]  arrScore,声明数组变量时,在栈开辟空间将arrScore存入,此时为null(其实变量arrScore不存在内存,只是为了好标识)

b)右边:new关键字会做四件事:开辟堆空间;创建对象;调用构造函数;返回堆空间地址。返回堆空间地址就是将地址0x16返回给等号左边的arrScore变量,这时栈空间地址将指向堆空间地址

(2)arrScore=new  string[7];

    不会修改数组,而是直接创建新的数组,在堆空间开辟新的堆空间存储,由于数组名一样,将会覆盖掉原先数组,即将原来的arrScore指向的堆空间地址擦除,重新指向新创建数组的地址0x20

        3.  将原数组拷贝到新数组 

string[]  arrScore=new  string[5]{“李”,”张”,”王” ,“赵”,”孙”};

string[]  arrScoreNew=new  string[7];

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

{arrScoreNew[i]=arrScore[i];}

b) arrScore.CopyTo(arrScoreNew,0);

从新数组arrScoreNew的首元素地址开始复制进去

假设:arrScore.CopyTo(arrScoreNew,2);则存储图如下:

  4.  对数组进行排序

   典型的排序算法:冒泡排序

     让数组中的元素两两比较(第i个与第i+1个比较),经过n遍两两比较,数组中的元素能按照我们预期的规律排序。

     要从大到小排序,我们进行两两比较的时候用 < ;反之使用 > 。

     从大到小排序,如果arr[i] < ar[i+1],则交换两个元素的值。

     n个数需要排序n - 1趟;第t趟比较的次数为n - t次

     i=0,第一趟;i=1,第二趟;趟数:i+1

    程序代码如下:

            int[] scores = { , , , , ,  };
//进行由小到大的排序
int length = scores.Length;
int temp = ;
bool isSwap = false; //是否有交换过
for (int i = ; i < length; i++) //控制比较的趟数,循环一次表示比较一趟
{
isSwap = false;
//控制每一趟比较的次数,第x趟需要比较n-x次
for (int j = ; j < length - i -; j++)
{
if (scores[j] > scores[j + ])//如果这里把j写成i的话,这样每一趟比较都是两个固定的数
{
temp = scores[j];
scores[j] = scores[j + ];
scores[j + ] = temp;
isSwap = true;
}
}
if (isSwap == false) //如果在某一趟排序没有进行交换,则数组已经是有序的了,没有必要进行排序
{
break;
}
}

 5.  调用已有方法对数组排序

  上面的冒泡排序算法一般会在面试中考到,但在程序中我们可以通过静态方法对数组进行排序。

  Array.Sort(array);    //对数组进行升序排列

  Array.Reverse(array);  //对数组进行反转,这样就达到了对数组进行降序排列的效果

6.  求出数组中的最大值和最小值3

  1) 通常采用的方法

int max = arr[];
for(int i = ; i < arr.Length ;i++)
{
if ( arr[i] > max )
{
max = arr[i];
}
} int min = arr[];
for(int i = ; i < arr.Length ;i++)
{
if ( arr[i] < min )
{
min = arr[i];
}
}

   当循环结束的时候,就可以获得数组中的最大值/最小值了。

  2) 数据需要从字符串中解析出来的时候

            string[] lines = File.ReadAllLines("1.txt", Encoding.Default);
//max设置为int类型能够表示的最小值;min设置为int类型能够表示的最大值
int max = int.MinValue;
int min = int.MaxValue;
int sum = ;
for (int i = ; i < lines.Length; i++)
{
string[] items = lines[i].Split(new char[] {','},StringSplitOptions.RemoveEmptyEntries);
int sar = Convert.ToInt32(items[]);
sum += sar;
if (max < sar)
{
max = sar;
}
if (min > sar)
{
min = sar;
}
}
Console.WriteLine("这些员工的最高工资{0},最低工资{1},平均工资{2}", max, min, sum / lines.Length);
Console.ReadKey();

  

.NET基础——数组的更多相关文章

  1. 【搬砖】安卓入门(4)- Java开发编程基础--数组

    05.01_Java语言基础(数组概述和定义格式说明)(了解) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. ...

  2. PHP基础 数组函数 的总结

    <?php /** * PHP基础 数组操作函数 * * 指针函数:[类似于数据库的游标] 见例1.1 * current($arr)/pos 返回当前指针指向的元素 * key($arr) 返 ...

  3. Java基础——数组应用之StringBuilder类和StringBuffer类

    接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...

  4. java基础-数组的折半查找原理

    java基础-数组的折半查找原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让你写一个数组的查找功能,需求如下:在一个数组中,找一个元素,是否存在于数组中, 如果存在就返回 ...

  5. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  6. day05<Java语言基础--数组>

    Java语言基础(数组概述和定义格式说明) Java语言基础(数组的初始化动态初始化) Java语言基础(Java中的内存分配以及栈和堆的区别) Java语言基础(数组的内存图解1一个数组) Java ...

  7. Java语言基础(数组)

    Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...

  8. 算法与数据结构基础 - 数组(Array)

    数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...

  9. Java编程基础——数组和二维数组

    Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...

  10. 《Java基础——数组的定义与使用》

    Java基础--数组的定义与使用       一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...

随机推荐

  1. LibVLC audio controls

    原文 http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__audio.html LibVLC audio co ...

  2. Zend Server的WebAPI焦点:异步操作

    Zend Server作为Web应用服务器,在使用时,涉及连接的基本步骤,其中包括许多可用的WebAPI行为. WebAPI提供一些需要时间才能完成的操作,包括很复杂的或依靠外部实体(如远程服务器)才 ...

  3. MySQL之查询优化方式(笔记)

    1.COUNT() 对COUNT的优化可以通过下面的SQL实现 mysql> select count(gnp<10000 or null) as '<<<<',c ...

  4. C#中使用消息队列RabbitMQ

    在C#中使用消息队列RabbitMQ 2014-10-27 14:41 by qy1141, 745 阅读, 2 评论, 收藏, 编辑 1.什么是RabbitMQ.详见 http://www.rabb ...

  5. python网络爬虫进入(一)——简单的博客爬行动物

    最近.对于图形微信公众号.互联网收集和阅读一些疯狂的-depth新闻和有趣,发人深思文本注释,并选择最佳的发表论文数篇了.但看着它的感觉是一个麻烦的一人死亡.寻找一个简单的解决方案的方法,看看你是否可 ...

  6. jQuery弹出窗口完整代码

    jQuery弹出窗口完整代码 效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/1.htm 1 <!DOCTYPE html PUBLIC "- ...

  7. 我的Android 4 学习系列之创建用户基本界面

    目录 使用视图和布局 理解Fragment 优化布局 创建分辨率无关的用户界面 扩展.分组.创建和使用视图 使用适配器将数据绑定到视图 使用视图和布局 1. Android UI 几个基本概念 视图: ...

  8. c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程

    定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法.用SqlParameter[]代替存储过程需要的参数.这样就不用为每一个存储过程写一个方法了 1.首先定义一个ExcuteProc ...

  9. 【转】十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  10. Talend open studio数据导入、导出、同步Mysql、oracle、sqlserver简单案例

    推荐大家一个BI工具:talend open studio.我也是刚接触,懂得不多,感觉比较神奇就想大家推荐一下... 由于公司项目,接触了一下BI工具talend,感觉功能很强大, 可以同步多种数据 ...