使用纤程简化枚举器4:过滤元素
元素 过滤 枚举 简化 使用
2023-09-14 09:10:43 时间
关于枚举的一种高级玩法叫做”元素过滤”,什么意思呢?就是说一个枚举器获取另一个枚举器的输出并删除一些元素。
在基于生产者驱动的枚举器中,你可以通过替换一个新的回调函数来实现过滤,该回调函数代表客户端响应过滤元素的回调,并将未过滤的元素的回调转发给客户端。
在基于消费者驱动的枚举器中,你可以通过将枚举器包装在另一个枚举器中来实现组合,该枚举器驱动内部枚举器并转发它希望调用者看到的元素。
基于纤程的枚举器的行为,更像是一种消费者驱动的枚举器,但状态管理更为容易。
让我们编写一个过滤器枚举器,它删除所有目录并禁止递归到它们,如下图所示:
为了从这个过滤的枚举器中生成元素,我们运行真正的枚举器 (m_e) 并删除所有目录,防止它们被传播到过滤器的消费者,并且只是对真正的枚举器响应“跳过它”这个动作。
另外,还可以使用我们过去几天一直使用的相同 TestWalk 函数来测试这个过滤后的枚举器。 你需要做的就是对main 函数做一些小改动,如下图所示:
请大家仔细观察一下,就会发现:程序不再递归到子目录。 它只是计算当前目录中文件的大小。
下一次我们将会关注的主题是:组合。
总结
枚举器上进行过滤这种玩法,我觉着吧,这事儿,越来越有意思了哈。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Using fibers to simplify enumerators, part 4: Filtering》
相关文章
- JAVA-JSP动作元素之param
- JAVA-JSP指令元素之page指令
- 定位网页元素
- jQuery2.0.3源码分析系列(28) 元素大小
- Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
- js和jquery获取父级元素、子级元素、兄弟元素的方法{转}
- 116、Android获取Manifest中<meta-data>元素的值
- Vue中data元素之间相互赋值的陷阱
- jQuery on()绑定动态元素出现的问题小结
- count算法计算容器中元素出现次数
- NA 去掉删除多余的na 向量是否存在两个以及两个以上等于0的值 na NA 如何计算R中向量中大于某个值的元素数量 R如何按条件查找数据并删除符合条件的数据所在的行 判定一个向量是否包含0这个元素