`
yiminghe
  • 浏览: 1431390 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多维数组迭代器应用

阅读更多

在代码之美中提到了这个问题,经常遇到嵌套数组的情况即多维数组情况,有时并关心嵌套结构,而只关心里面的数据处理,那么一般的自己写对应的for循环来拆除对应的嵌套数组,如果同书中所说编写通用的 Iterator 迭代器,则可不必对不同的嵌套循环编写不同的for循环,只需同的操作即可,还可方便的处理维slice情况,对每一维都可控制到底要处理哪些数据:

 

例子:

处理二维数组:

 

1 2 3 4

5 6 7 8

9 x y z

 

中的

 

2 3

6 7

 

数据

 

手工for循环处理

 

for(var i=0;i<2;i++){
   for(var j=1;j<3;j++) {
       //TODO : process(xx);
   }
}

 


采用迭代器

 

var matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 'x', 'y', 'z']
];

var dimRange = [
//第一维 0-1循环
{
    start: 0,
    end: 1
},
//第二维 1-2 循环
{
    start: 1,
    end: 2
}
];

var iter = new matrixIter(dimRange, matrix);
var item;
var re = [];
while (item = iter.next()) {
    //TODO: process(xx)
}
 

可见采用迭代器后,代码更加简洁,以及更好掉头,只需更改 dimRange 配置,省去了大段修改 for 的麻烦,赞


演示 @google code

 

0
0
分享到:
评论

相关推荐

    一组新的多维数组模板类

    另外,多维数组的空间是连续的,这跟用vector of vector实现的不一样,可以用迭代器 从头到脚挨个摸一遍. boost库也提供了多维数组类,当然还有别的几个数组类.我感觉boost多维数组类的缺点 就是只支持动态...

    relError.m:计算 n 维数组之间的相对误差。-matlab开发

    我使用这个函数来测试对我的数值求解器的调整是否接近解析解,但当然有许多应用程序在其中指示性错误会很有用。 使用该功能很简单。 使用您想要比较的数组/矩阵: relError(A,B,C,...) 其中大小(A)=大小(B)=...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    19.1.3 常量迭代器和可变迭代器 562 19.1.4 反向迭代器 563 19.1.5 其他几种迭代器 565 19.2 容器 566 19.2.1 连续容器 566 19.2.2 容器适配器栈和队列 570 19.2.3 关联容器集合和映射 572 19.2.4 效率 575...

    lua 程序设计学习.doc 版

    11.2 矩阵和多维数组 11.3 链表 11.4 队列和双向队列 11.5 集合和包 11.6 字符串缓冲 第12章 数据文件与持久化 12.1 序列化 12.1.1 保存不带循环的table 12.1.2 保存带有循环的table 第13章 Metatables and ...

    Delphi - VRCalc++ OOSL (Script) and more:Delphi-VRCalc ++ OOSL等(页面列表,文本编辑器,VRAstro ...)-开源

    构建包(Delphi&C ++ Builder)VRCalc ++面向对象的脚本语言-引擎源代码(Pascal)-构建包( Delphi)-VRCalc ++脚本系统RT库-指南和文档-Delphi应用程序的Delphi和C ++多维数组类的脚本测试代码分页列表和迭代器-...

    C# 基础教程

    6.2.3 多维数组 66 6.2.4 查询秩 68 6.2.5 锯齿状数组 68 6.3 使用索引器将对象当作数组对待 70 6.3.1 定义索引器 71 6.3.2 索引器示例程序 71 6.2.3 设计规则 73 6.4 本章小结 73 6.5 实战演练 73 第七章 接口与...

    java初学者必看

    6.2 二维数组和多维数组 6.2.1 二维数组的声明 6.2.2 二维数组的初始化 6.2.3 二维数组的空间模型 6.2.4 二维数组的使用 6.3 数组操作 6.3.1 排序数组 6.3.2 查找 6.3.3 复制数组 6.3.4 填充数据 6.3.5 ...

    Visual C# 2005程序设计自学手册 随书源码第一部分(共三部)

    4.2.4 多维数组 71 4.3 动态数组 72 4.3.1 动态数组的声明 72 4.3.2 声明动态数组的注意事项 74 4.4 数组的基本操作 74 4.4.1 输入与输出数组 74 4.4.2 如何定位数组 76 4.4.3 如何遍历数组 78 ...

    JavaScript权威指南(第六版) 清晰-完整

    7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 函数 8.1 函数定义 8.2 函数调用 8.3 函数的实参和形参 8.4 作为值的函数 8.5 作为命名空间的...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     3.6 多维数组 112  小结 117  术语表 117  第4章 表达式 119  4.1 基础 120  4.1.1 基本概念 120  4.1.2 优先级与结合律 121  4.1.3 求值顺序 123  4.2 算术运算符 124  4.3 逻辑和关系运算符 126  4.4 ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     3.6 多维数组 112  小结 117  术语表 117  第4章 表达式 119  4.1 基础 120  4.1.1 基本概念 120  4.1.2 优先级与结合律 121  4.1.3 求值顺序 123  4.2 算术运算符 124  4.3 逻辑和关系运算符 126  4.4 ...

    JavaScript权威指南(第6版)(中文版)

    7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 函数 8.1 函数定义 8.2 函数调用 8.3 函数的实参和形参 8.4 作为值的函数 8.5 作为命名空间的...

    JavaScript权威指南(第6版)

    7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 函数 8.1 函数定义 8.2 函数调用 8.3 函数的实参和形参 8.4 作为值的函数 8.5 作为命名空间的...

    C++ Primer第四版【中文高清扫描版】.pdf

    4.4 多维数组 122 小结 124 术语 125 第5章 表达式 127 5.1 算术操作符 129 5.2 关系操作符和逻辑操作符 131 5.3 位操作符 134 5.3.1 bitset对象或整型值的使用 135 5.3.2 将移位操作符用于IO 137 5.4 赋值操作符 ...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    10.1.8 使用多维数组 177 10.1.9 使用数组来玩牌 178 10.2 什么是集合类 184 10.2.1 arraylist集合类 185 10.2.2 queue集合类 187 10.2.3 stack集合类 188 10.2.4 hashtable集合类 189 10.2.5 sortedlist集合...

Global site tag (gtag.js) - Google Analytics