`
yiminghe
  • 浏览: 1466601 次
  • 性别: 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多维数组类的缺点 就是只支持动态...

    使用vector申请多维数组

    在C++编程中,`std::vector` 是一个非常重要的容器,它允许动态地...总的来说,使用 `vector` 创建多维数组为C++程序员提供了灵活性和便利性,但在具体应用中,应根据项目需求权衡性能和易用性,选择最适合的数据结构。

    PHP foreach遍历多维数组实现方式

    在实际应用中,我们经常需要处理的不仅是一维数组,还有可能遇到多维数组。PHP的foreach语句是遍历数组最常用的方法,但是当面对多维数组时,简单的foreach语句就显得不够用了。为了解决这个问题,我们可以采用不同...

    python numpy 一维数组转变为多维数组的实例

    在Python中,range函数生成的是一个迭代器,使用list函数可以将其转换为列表,然后使用NumPy的array函数,可以将这个列表转换成NumPy的数组对象。 在上面的实例中,首先使用import语句导入了NumPy库,并将库简化为...

    array:遵循STL精神的C ++多维数组

    `std::array`为固定大小的多维数组提供了便利的接口,这使得在处理多维数据时更加灵活和高效。下面将详细探讨`std::array`及其在C++中的应用。 1. **什么是STL精神?** STL(Standard Template Library)是C++中的...

    C#迭代器

    在C#编程语言中,迭代器是一个...通过上述三个实例,我们可以看到迭代器在不同场景下的应用,从简单的数字序列到复杂的多维数组和自定义数据结构的遍历。掌握迭代器的使用对于提升C#编程效率和代码质量具有重要意义。

    CSharp-Advanced:堆栈和队列,多维数组,高级集合和词典,流,文件和目录,函数式编程,定义类,泛型,迭代器和比较器

    3. **多维数组**:除了基本的一维数组,C#还支持二维、三维甚至更高维度的数组,便于处理表格或矩阵数据。例如,`int[,]` 定义了一个二维数组。 ### 高级集合和词典 4. **集合(Collections)**:如`List&lt;T&gt;`、`...

    Java第5章 数组 含源代码

    提供的源代码可能包含了上述概念的各种实例,包括数组的声明、初始化、遍历、排序、多维数组等。通过阅读和理解这些源码,你可以更好地掌握Java数组的使用。 总之,Java第5章关于数组的内容是学习Java编程的基础,...

    23.java数组的遍历.zip

    - 遍历多维数组:对于二维数组或多维数组,需要嵌套循环来遍历每个子数组。 四、注意事项 1. 避免越界:在遍历过程中,确保索引不会超出数组的边界。 2. 空指针异常:如果未初始化数组,直接使用`length`属性会抛出...

    数组练习题Subject:数组答案源代码

    它们在功能上与数组类似,但提供了更多的操作,如动态增长、迭代器等。然而,数组在访问速度上通常优于集合,因为集合内部通常需要额外的封装和管理。 总结,数组作为基本数据结构,是Java程序员必须掌握的重要概念...

    C++OpenCV3源代码用迭代器访问像素

    `cv::Mat`类内部存储了一个多维数组,每个元素代表一个像素值。对于灰度图,每个像素只有一个值;而对于彩色图(如RGB格式),每个像素包含三个分量值。 迭代器是C++标准库提供的一种访问容器元素的方式,类似于...

    Java实现遍历一个数组

    虽然数组不直接支持迭代器,但Java集合框架中的ArrayList类(它是List接口的一个实现)提供了迭代器。如果你的数组是ArrayList类型,可以使用迭代器: ```java ArrayList&lt;Integer&gt; list = new ArrayList(Arrays....

    数据结构--数组、单链表和双链表介绍以及双向链表 数组和链表.pdf

    在C语言中,多维数组本质上也是通过一维数组实现的。动态数组是指数组的容量能动态增长的数组,C语言需要手动实现,而C++的STL提供了Vector。 二、单链表 单链表是一种链表的变种,由节点组成,每个节点都包含下一...

    05.【数组】.zip

    此外,集合提供了更多的功能,如迭代器、排序、过滤等。 总之,理解并熟练运用Java中的数组是编程基础的重要部分。数组在数据处理、算法实现等方面都发挥着重要作用,因此掌握数组的概念、操作及注意事项是每个Java...

    labview数组的使用

    3. 多维数组:多于两维的数组,可以处理更复杂的数据结构。在LabVIEW中,多维数组可以看作是多个二维数组的堆叠。 二、创建和初始化数组 1. 使用“数组构造函数”:在工具栏中找到“数组构造函数”,拖放到前面板...

    LABVIEW数组讲义.pptx

    一维数组由一系列按顺序排列的元素组成,而多维数组可以扩展到二维、三维甚至更高维度。每个维度的大小可以达到2^31-1(约21亿)个元素。数组索引通常从0开始,例如,一个10元素的一维数组的索引范围是0到9。 **...

    PHP设计模式之迭代器模式的深入解析

    迭代器模式相较于传统通过索引访问集合元素的方式,提供了更好的封装性,可以应用于无限序列、对象链、多维数组等复杂场景。在这些场景下,迭代器模式可以隐藏底层数据结构的复杂性,使得客户端代码能够以一致的方式...

    数组进阶示例.rar

    2. **多维数组**:Java也支持多维数组,如二维数组,它可以看作是数组的数组,常用于表示矩阵或表格数据。`int[][] matrix = new int[3][4];` 这将创建一个3行4列的二维数组。 3. **遍历数组**:通过for循环可以...

    java数组总结共9页.pdf.zip

    集合提供了更多的功能,如迭代器、泛型等。 9. **数组的内存管理**: 数组在Java中是对象,存储在堆内存中。数组的元素如果是基本类型,则直接存储值;如果是引用类型,存储的是引用。 10. **数组的性能**: ...

Global site tag (gtag.js) - Google Analytics