【问题标题】:nth element in iterator迭代器中的第 n 个元素
【发布时间】:2016-03-20 12:13:44
【问题描述】:

当我遍历一个文件夹结构时——

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));

– 有没有办法直接获取结果迭代器 ($it) 中的第 n 个元素,即 无需循环无需先将其转换为数组(例如使用iterator_to_array())?

【问题讨论】:

  • 因为迭代器很可能是一个生成器(通常是任何构成其数据的东西,而不是迭代内存中现有的数据结构)......不。
  • @deceze 啊,我明白了,这就是为什么我的问题中的代码执行得这么快——它根本不执行,直到我尝试用它做点什么。
  • 是的,确切地说,您问题中的代码实际上还没有做任何事情。

标签: php iterator


【解决方案1】:

由于这似乎是您正在寻找的答案,因此将我的评论重新发布为答案:

因为迭代器很可能是一个生成器(任何构成它的数据的东西,而不仅仅是迭代内存中的东西):不,你不能直接跳转到特定的“索引” .您必须迭代迭代器才能获得您想要的特定数据。

【讨论】:

    【解决方案2】:

    您可以使用 while 循环以及 next()valid() 方法来做到这一点。只需使用计数器并转到下一个元素,直到找到所需的元素。最后你只需要确保它仍然是一个有效的位置。

    $element = 3;
    $elementCount = 0;
    
    $it->rewind();
    while($elementCount < $element) {
        $it->next();
        $elementCount++;
    }
    
    
    if($it->valid())
        echo $it->current();
    }
    

    【讨论】:

    • 对不起,如果不清楚,但我的问题中的“直接”意味着我不想循环,因为循环需要时间(我的迭代器长 300000 个元素)。我将编辑我的问题以使其更清楚。
    • @what 直接没有。由于它是一个迭代器,它遍历数据并对其进行迭代。所以它不可能直接跳到任何地方。
    • 谢谢,我想我开始明白了。当我尝试对迭代结果做某事时,迭代器才开始工作。在此之前,结果还不存在。
    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2018-12-09
    • 2018-12-28
    • 2011-09-19
    相关资源
    最近更新 更多