我即将在PHP5.4中实现pythons itertools.groupby,因为我需要它。
它是一个迭代器,以一个迭代器作为输入,并返回一个迭代器序列,这正是它所做的--它对这个问题不重要。
这看起来应该是一个RecursiveIterator;但是我不知道这个接口的目的是什么。
为什么不直接返回迭代器,而不是在hasChildren上绕道?还有另一件事,那应该是什么价值呢?
可能我错了;GroupBy不应该是RecursiveIterator;但这就是问题所在。RecursiveIterator的用途/用途是什么?
编辑:这个问题不是“RecursiveIteratorIterator在PHP中是如何工作的?”任何关于数组的问题都可以通过对ArrayIterator的深入讨论完全得到回答。
这个问题是关于RecursiveIterator,为什么你使用它,什么时候它是合适的使用等等。我对使用该接口的具体类不感兴趣。
发布于 2013-12-20 14:50:48
迭代器在集合上迭代。例如,考虑到这种结构:
array(
'foo',
'bar',
array(
'baz'
)
)一个常规的Iterator将遍历这个结构并返回foo、bar和Array。RecursiveIterator有一些方法来表示嘿,如果您想让我这样做的话,我可以迭代一个子程序(RecursiveIterator::hasChildren和RecursiveIterator::getChildren)。您可以编写代码来检测这些子程序的存在,并自己获得子迭代器,或者您可以使用一个RecursiveIteratorIterator,它可以为您这样做,并允许您在结构上进行迭代,就好像它是一个平面列表一样,返回foo、bar、baz。
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as ...)这种区分是存在的,因此您可以:
我想说,RecursiveIterator接口很少被“使用者”直接使用,但它是RecursiveIteratorIterator的一个构建块,它允许您为自己的递归数据结构定义自己的迭代器,以便由RecursiveIteratorIterator迭代。它允许您通过定义两个方法来廉价地实现递归:一个方法检查一个元素是否可迭代,另一个方法为它返回一个迭代器。
https://stackoverflow.com/questions/20705924
复制相似问题