foreach

foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成。in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素。

该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面 的执行语句。

foreach语句经常与数组一起使用,下面实例将通过foreach语句读取数组的值并进行显示。

数组的属性:Array.Length数组的容量

利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。

当数组的维数、容量较多时,C#提供了foreach语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下:

遍历数组:foreach(type objName in collection/Array)

这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type是你所要读取的数组对象将要存储在objName变量的数据类型,而objName是定义了一个type类型的变量名,代表每一次从集合和数组(collection/Array)中取得的元素,collection/Array则是所要存取的数组对象。用这种方法只需写一个foreach就可以遍历出除交错数组以外的所有维数的数组。

注: objName的数据类型type必须与collection/Array对象的类型相同或比它大。

下面我们举一个用foreach和for遍历规则数组的例子,其中涉及到了一个数组得到维数的方法,比较foreach在一次性遍历规则数组上的优势。

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a

for (int i = 0; i < a.GetLength (0) ;i++ )   //用Array.GetLength(n)得到数组[0,1,,,n]上的维数的元素数,0代表行,1列,n代表此数组是n+1维

{

for (int j = 0; j < a.GetLength(1); j++)

{

for (int z = 0; z < a.GetLength(2);z++ )//2代表得到纵深上的元素数,如果数组有n维就得写n个for循环

{

Console.WriteLine(a[i,j,z]);

}

}

}

用foreach循环一次性遍历a数组

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a                       foreach(int i in a)                       {                           Console .WriteLine (i);                       }

这两种代码执行的结果是一样的都是 每行一个元素,共8行,元素分别是1 2 3 4 5 6 7 8

下面我们再做个例子,是一个利用for和foreach循环做的存取数组元素的例子,首先提示用户输入学生的个数,然后把学生个数作为存储学生姓名的数组names的元素个数,采用for循环按照数组的索引i从0位开始循环输出“输入学生姓名”的提示,并把用户输入的学生姓名按照其在数组的索引方式names[i]存储在names数组中,for循环次数的最大值(即索引的最大值)通过数组属性.Length得到,我们说过容量与索引之间的关系是index=Array.Length-1,本题即i的最大值<names.Length,存储后,提示“输出学生姓名”,再用foreach循环一次性遍历names数组中存储的每个元素(学生的姓名),一个一个的把它赋值给name元素,然后输出到控制台上。

必须注意的是,借助foreach,只能一一取得数组中的元素,并不能利用这种语句改变数组所存储的元素。using System;
class Program
{
static void Main()
{
   int count;
   Console.WriteLine("输入要登记的学生数");
   count = int.Parse(Console.ReadLine());
   string[]names = new string[count];
   for (int i = 0; i < names.Length; i++)
   {
    Console.WriteLine("请输入第{0}个学生的姓名", i + 1);
    names[i] = Console.ReadLine();
   }
   Console.WriteLine("已登记的学生如下");
   foreach (string name in names)
   {
    Console.WriteLine("{0}", name);
   }
   Console.ReadKey();
}
}

时间: 2024-11-03 05:41:29

foreach的相关文章

Typescript : 遍历Array的方法:for, forEach, every等

方法一,for-of 这个貌似是最常用的方法,angular 2中HTML语法绑定也是要的这种语法. let someArray = [1, "string", false]; for (let entry of someArray) { console.log(entry); // 1, "string", false } for-in 官方文档上强调了for-in和for-of的区别: let list = [4, 5, 6]; for (let i in li

嘿!@野兽,你的ng api 掉了 - - angular.forEach

@野兽的 ng api 学习 -- angular.forEach angular.forEach 调用迭代器函数取每一项目标的集合,它可以是一个对象或数组.迭代器函数与迭代器(value.key)一起调用,其中值是一个对象属性或数组元素的值,而数组元素是对象属性的关键或数组元素索引.为函数指定一个可选的上下文. 格式:angular.forEach(obj,iterator,[context]); obj:遍历的对象 iterator:迭代器 [content]: 对象为迭代器函数的上下文(t

【java8】慎用java8的foreach循环

虽然java8出来很久了,但是之前用的一直也不多,最近正好学习了java8,推荐一本书还是不错的<写给大忙人看的javase8>.因为学习了Java8,所以只要能用到的地方都会去用,尤其是Java8的Stream,感觉用起来觉得很方便,因为点点点就出来了,而且代码那么简洁.现在开始慢慢深入了解java8,发现很多东西不能看表面. 比如常规遍历一个集合,下面给出例子: 1.首先遍历一个List 方式1.一开始是这样的: public static void test1(List<Strin

php中的foreach使用

foreach语句是php用来遍历数组的一种方法,主要有两种格式: 第一种:foreach (array_name as $value) 例1: <?php$arr=array(1,2,3);foreach ($arr as $key =>$value){ echo "Value: " . $value . "<br />";}?> 运行结果: 第二种:foreach  (array_name as $key => $value)

c# winform 循环遍历界面上的所有控件,foreach,Controls,AllowDrop

foreach (System.Windows.Forms.Control control in this.groupBox2.Controls)//遍历groupBox2上的所有控件 { if (control is System.Windows.Forms.PictureBox) { System.Windows.Forms.PictureBox pb = (System.Windows.Forms.PictureBox)control; pb.AllowDrop = true; } if

java中for循环的特殊:foreach的使用

首先格式是: for(元素类型 元素变量:遍历对象){ 执行的代码 } 例如: public class Test { public static void main(String[] args) { // 定义一个整型数组,保存成绩信息 int[] scores = { 89, 72, 64, 58, 93 }; // 对Arrays类对数组进行排序 Arrays.sort(scores); // 使用foreach遍历输出数组中的元素 for ( int sco:scores ) { Sys

map() 和 forEach() 区别 兼容写法

兼容写法: 不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下: /** * forEach遍历数组 * @param callback [function] 回调函数: * @param context [object] 上下文: */ Array.prototype.myForEach = function myForEach(callback,context){ contex

【java8】为java8的foreach正名

首先为自己没有经过严格测试得出的错误结论感到抱歉,原博文,测试完感觉自己发现了一个新bug,后来思前想后觉得不应该是这样的,如果效率差的这么多,jdk的开发人员会不去优化它吗,但是怎么重复测试任然得到一样的结果,非常疑惑. 我觉得应该是测试方法出问题了,可是怎么也想不到原因,后来了解到jmh,深入研究了一番,觉得jmh的测试值得借鉴,jmh在测试的时候都会先经过预热几遍要测试的代码,示例如下: public static void main(String[] args) throws Runne

在for、foreach循环体中添加数组元素

在开发工作中遇到这样一种情形,需要在循环体中动态向遍历中的数组添加元素并在当前循环遍历中使用数组的全部元素. 首先使用foreach循环来遍历数组,将代码简化抽象如下: $arr = array(1, 2, 3, 4, 5, 6, 7, 8); foreach($arr as $v) { if($v % 2 == 0) $arr[] = 11; echo $v . ' '; } 结果只打印出数组原来已有元素,在循环体中动态添加的元素并没有打印出来. 后来改用for循环,coding如下: $ar

foreach和foreachPartition

转载请标明出处http://www.cnblogs.com/haozhengfei/p/6776fe93f754daf60d00d2cb509422a1.html foreach和foreachPartition--Action类算子 代码示例