黑马程序员_C#、JS和JQuery中的遍历问题

来源:互联网 发布:软件售后服务工作内容 编辑:程序博客网 时间:2024/05/18 03:12
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------

一、

C#中,foreach专门用来遍历数组和集合元素的,foreach的工作原理是逐个枚举出数组或集合中的每个元素。

foreach 语法格式:

foreach(类型 迭代变量 in 集合/数组)

{

语句块

}

foreach是只读的,它直接读取数组中的元素,因此执行效率会比for高;foreach可以在长度未知的情况下进行遍历;在foreach循环体中,不能对所读取的元素值进行删除、修改等操作。

例如:

Int[] nums={3,6,8,9};

Foreach(int i in nums)

{

//i++; //这里不可以对i进行自加加自减减等修改的动作,否则会报错

Console.WriteLine(i);

}

Console.ReadKey();

    for循环:首先计算一个初始序列,然后当某条件为真的时候,重复执行嵌套语句,并计算一个迭代的表达式序列,如果条件为false,则退出for循环,备注for循环的语句常用于遍历数组。

For(初始化序列;每次循环前要验证的条件;每次循环结束后要执行的语句)

{

语句块

}


    for循环控制由编码者完全控制,所以可以在循环内部对遍历对象进行修改,只要能够保证逻辑不出错。for语句的内部实现上来说不会需要额外的空间和计算能力。这并不能说for语句比foreach更有效。需要根据情况来定。对于数组或者其它连续存储的数据结构,在循环内部使用索引器进行访问,一般会使用偏移进行定位,这确实比较高效。但是对于非连续存储的数据结构,由于使用索引器进行定位不是靠偏移,有额外的计算工作。当然也有人在for里边使用遍历器进行访问,这还不如使用foreach。所以能用foreach就用foreach,必须用for的时候才能用for

二、

JS中的array是一个动态的数组,长度不受限,与C#中相对比,JS中的数组没有下标和属性值的概念,而是叫keyvalue,在进行遍历时要加以区分:

(1)在JS中并没有foreach句法,但是有类似的用法,如下:

Var Dict=new Array();

Dict["ren"]="";

Dict["guo"]="";

Dict["wo"]="";

Dict["hua"]="";

For(var k in Dict){

Alert(k)

}

这种情况下,遍历得到的就是key值,也就是renguowohua

(2)而要得到value的值,语法和C#中一样,如下

 Var Dict=new Array();

Dict["ren"]="";

Dict["guo"]="";

Dict["wo"]="";

Dict["hua"]="";

For(var k=0;k< Dict.length;k++){

Alert(k)

}

    这种情况下,遍历得到的就是value值,即人、国、我、话。因此在JS中运用foreachfor语法得到的值是不一样的。

三、

    在JQuery中,同样也有遍历,不过,值得庆幸的是,JQuery中将遍历进行了封装,使得遍历更加方便,如下:

    var arr={3,5,8};

   $.each(arr, function (item) { alert(item); });

   var arr2=$.map(arr,function(item){return item * 2;}); 

    alert(arr2);

在JQuery中的$.map有点类似C#中的for循环,可以遍历数组,并对元素进行修改操作。

$.each则像C#中的foreach语法,仅限于读取操作。

    var dict = { "tom": 20, "jerry": 50, "jim": 30, "jermy": 19, "wil": 30 };

    $.each(dict, function (key, value) { alert(key + "的年龄是" + value); }); 

------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------