黑马程序员技术交流社区

标题: 关键字 foreach里的参数求解 [打印本页]

作者: 彭清贵    时间: 2013-2-23 04:19
标题: 关键字 foreach里的参数求解
本帖最后由 彭清贵 于 2013-2-23 04:20 编辑

在学委托修改字符串时候出现一下类是的代码。如下
int[] arr = { 1, 2, 3 };
            foreach (int i in arr)//知道这是个循环,为什么里面的参数连个,都没有,怎么看int i in arr,主要是int i  啥意思,i是循环变量,他的初始值是多少
            {
                System.Console.WriteLine(i);
            }
            Console.ReadKey();


作者: 3Y25    时间: 2013-2-23 08:39
我也在期待解答中
作者: 彭清贵    时间: 2013-2-23 09:16
3Y25 发表于 2013-2-23 08:39
我也在期待解答中

若是参数  那一个是2个参数 中间隔开 这个隔开的都没   
作者: 郝滨    时间: 2013-2-23 10:20
这是foreach遍历的形式:foreach (var item in collection)  var指代后面访问数据集合对象的类型,可以换成int string等等方便查看 也可以不换 collection是上面创建数组的名字 为任意 就是你这里的arr [item为标识符
作者: 戴鑫凯    时间: 2013-2-23 10:33
foreach 与 for循环不同 , foreach是一个迭代器,它是一次性遍历数据中的所有元素。所以foreach不能给数组赋值。

            int[] arr = { 1, 2, 3 };
            foreach (int i in arr)//知道这是个循环,为什么里面的参数连个,都没有,怎么看int i in arr,主要是int i  啥意思,i是循环变量,他的初始值是多少
            {
                System.Console.WriteLine(i);
            }
            Console.ReadKey();

foreach (int i in arr)    ===  foreach (var item in collection)   如果你能百分百肯定数组中的元素类型是int , 那这里的 var 就 可以用int , 这样可以取出数组中的所以数据.
作者: 颜晓峰    时间: 2013-2-23 11:32
有时候把编程语言真正当做一门语言会更好理解。
容我为你翻译下:
foreach(int i in arr) ->(这个句子基本上就是一个标准的英文句子了)翻译为:遍历arr中的整数i。形象点的话可以理解为:老师点名,被点到的同学喊“到”。arr就是全部同学,老师点名就是遍历foreach(), i 就相当于被点到的同学们喊的“到”。虽然喊的都是同个字,但代表的人却是不一样的,只是一个暂时的代号,一会老师可能会说:第3个喊到的人站起来。老师点名的对象是同学,所以要有个范围限制 in(在...里),in arr 在点名册内的同学。而int则表示老师点名的条件,有时候老师开心了,就点学号为3的倍数的同学,不开心了全部点。在该句里,遍历的对象为整数,如果是点名那就是全部同学了,伤。
分析:foreach(变量 in 数组)是foreach()的标准语法,因此不存在逗号。
      int i 就是单纯的定义一个整型变量i,用于暂时存储遍历到的整数,以便调用。
      相当于:
             int i;
                    foreach(i in arr);
                    i 的初始值就是NULL了。

以上为个人理解,若有不当之处,大家不用客气,尽情蹂躏吧。     
作者: 彭清贵    时间: 2013-2-23 23:33
颜晓峰 发表于 2013-2-23 11:32
有时候把编程语言真正当做一门语言会更好理解。
容我为你翻译下:
foreach(int i in arr) ->(这个句子基本 ...

这里的I的值是怎么变化的
作者: xiaoxiang_04    时间: 2013-2-24 00:01
int[] arr = { 1, 2, 3 };
             foreach (int i in arr)//
        {
                 System.Console.WriteLine(i);
             }
             Console.ReadKey();

foreach (int i in arr)
arr就是你定义的那个数组,你的数组定义是什么类型那么i就得是什么类型
foreach就是个循环,里面的代码走第一次,i的值为arr的第一个元素就是1,走第二次i的值就是arr的第二个元素就是2,第三次就是3
其实foreach跟for循环意思差不多,把上面代码改成for循环就是
for(int i=0;i<arr.length:i++)
{
System.Console.WriteLine(arr[i]);//for里面还得指定一下 输出arr里面的第几个元素,froeach里面就写个i直接就等价于arr[i]
}

不知道这么说你能明白不。。{:soso_e134:}
作者: 颜晓峰    时间: 2013-2-24 11:34
彭清贵 发表于 2013-2-23 23:33
这里的I的值是怎么变化的

int[] arr = { 1, 2, 3 };
foreach (int i in arr){};
在这个例子里的话,流程是这样的:程序进入数组arr,面前站着一排数字,于是程序开始逐个检查。站在最前面的是1,检查结果合格,是整数,于是给1一个棒子 i ,让他去{}里跑一圈,1完事后归队,程序继续检查,此时站在程序面前的是2,检查合格,令1将棒子 i 交给2,2也去{}里跑了一圈,以此类推。。。。
由于程序只会将棒子交给检查合格的对象,所以在这个例子里,i 的值依次是1,2,3。
下面举个例子,一样是遍历数组中的整数:
数组:[1,0.8,2.4,5],一样用上面的方法去遍历,那么 i 的值就会依次是1和5。0.8和2.4并不会赋给 i ,因为不是整数。
        
              




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2