首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecursiveIterator的意义是什么?

RecursiveIterator的意义是什么?
EN

Stack Overflow用户
提问于 2013-12-20 14:34:05
回答 1查看 335关注 0票数 0

我即将在PHP5.4中实现pythons itertools.groupby,因为我需要它。

它是一个迭代器,以一个迭代器作为输入,并返回一个迭代器序列,这正是它所做的--它对这个问题不重要。

这看起来应该是一个RecursiveIterator;但是我不知道这个接口的目的是什么。

为什么不直接返回迭代器,而不是在hasChildren上绕道?还有另一件事,那应该是什么价值呢?

可能我错了;GroupBy不应该是RecursiveIterator;但这就是问题所在。RecursiveIterator的用途/用途是什么?

编辑:这个问题不是“RecursiveIteratorIterator在PHP中是如何工作的?”任何关于数组的问题都可以通过对ArrayIterator的深入讨论完全得到回答。

这个问题是关于RecursiveIterator,为什么你使用它,什么时候它是合适的使用等等。我对使用该接口的具体类不感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-20 14:50:48

迭代器在集合上迭代。例如,考虑到这种结构:

代码语言:javascript
复制
array(
    'foo',
    'bar',
    array(
        'baz'
    )
)

一个常规的Iterator将遍历这个结构并返回foobarArrayRecursiveIterator有一些方法来表示嘿,如果您想让我这样做的话,我可以迭代一个子程序(RecursiveIterator::hasChildrenRecursiveIterator::getChildren)。您可以编写代码来检测这些子程序的存在,并自己获得子迭代器,或者您可以使用一个RecursiveIteratorIterator,它可以为您这样做,并允许您在结构上进行迭代,就好像它是一个平面列表一样,返回foobarbaz

代码语言:javascript
复制
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as ...)

这种区分是存在的,因此您可以:

  • 迭代一个平面列表,或
  • 使用“手动递归”迭代平面列表,或
  • 对递归结构进行迭代,就好像它是一个平面列表。

我想说,RecursiveIterator接口很少被“使用者”直接使用,但它是RecursiveIteratorIterator的一个构建块,它允许您为自己的递归数据结构定义自己的迭代器,以便由RecursiveIteratorIterator迭代。它允许您通过定义两个方法来廉价地实现递归:一个方法检查一个元素是否可迭代,另一个方法为它返回一个迭代器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20705924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档