问题标签 [enumerator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 构造函数中使用 for 创建的枚举器是如何被销毁的?
我有一个从 TCollection 派生的集合,实现了 GetEnumerator,所以我可以在类似的结构中使用它
枚举器派生自 TObject,与 Delphi 提供的标准枚举器完全一样,因此没有所有者。
Delphi 帮助提到,如果枚举器支持 IDisposable,它将被丢弃,但这当然仅适用于 .NET。
我想知道的是,枚举器实例是如何、何时以及由谁释放的?
c# - 处理迭代器块的参数
好吧,这是一段很好的坏代码:
现在对这个问题有一些背景:
CachingProxyList
是一个IEnumerable<T>
提供自定义“缓存”枚举器的实现:它IEnumerable<T>
在其构造函数上接受一个,并最初通过它进行枚举,但将每个项目保存在一个私有List<T>
字段上,以便在继续实际解析之前进一步迭代运行(而不是时不时地解析;或者不得不解析一个巨大的日志来查询它的一小部分)。
请注意,实际上需要这种优化,并且大部分已经在工作(如果我删除using
语句,除了泄漏的文件句柄之外一切都很好)。
Parse
和都是Tokenize
迭代器块(AFAIK,我可以同时延迟执行和清理代码的唯一明智的方法);他们的签名是IEnumerable<Event> Parse(IEnumerable<Token>)
和IEnumerable<Token> Tokenize(StreamReader)
。他们的逻辑与问题无关。
逻辑流程非常清晰;并且代码各部分的意图相当明显;但是这些using
块并不能与整个延迟执行的事情相处(当我枚举我的Log
对象时,using
已经退出并且流已被处理,所以Tokenize
从它读取的尝试惨遭崩溃)。
我可以承受相对较长时间锁定文件(打开的流),但迟早我必须关闭它。因为我不能真正使用using
s,所以我必须明确地处理流。
问题是:我应该把电话放在哪里Dispose()
?有没有常见的习惯用法来处理这样的场景?我不希望以“旧方式”(在多个地方发布资源,必须随时审查每个版本的代码在某处发生一点点更改,等等)来执行此操作。
我的第一个想法是使Log
类一次性,因此它的构造函数可以采用文件名并在类中进行所有资源管理(只需要消费者Log
在完成后自行处理),但我看不到创建的方法并在调用base
构造函数之前保存流(为该构造函数产生参数的调用需要流)。
注意:CachingProxyList
除非严格需要,否则不应触摸(我想保持它足够通用以使其可重用)。特别是,构造函数对于强制执行其余部分严重依赖的一些不变量是必不可少的(例如内部枚举器对象永远不会为空)。其他一切,OTOH,应该是公平的游戏。
感谢您阅读本文后的耐心等待,并提前感谢您提供的任何帮助;)
。
c# - C#:访问链表的反向枚举器
我为 LinkedList 创建了一个“反向迭代器”,现在我想将它与扩展方法一起使用:
但是,如果我写:
它不起作用。
我应该怎么办?
haskell - 过滤/分支枚举
我正在使用enumerator-0.4.10,我需要将传入流的不同部分的处理分配给不同的迭代(我正在解析一个巨大的XML文件,不同的子树有不同的处理逻辑)。由于子树不相交,因此一次只有一个迭代者处于活动状态。
我写了一个简单的例子,过滤流并将结果传递给一个迭代器;请看下文。但是,对于多个嵌套的迭代器,在我看来,我不能再使用枚举器了。我是否需要编写自己的包含多个内部迭代器的多枚举器?有更好的想法吗?
这是我的(初学者)单个嵌套迭代的代码:
delphi - 如何为从 TDictionary 派生的类创建自定义枚举器?
我已经定义了一个从 TDictionary 派生的集合,并且需要定义一个应用附加过滤器的自定义枚举器。
我被卡住了,因为我无法访问 TDictionary FItems 数组(它是私有的),所以我无法定义 MoveNext 方法
您将如何继续在从 TDictionary 派生的类上重新定义过滤枚举数?
这是一个简单的代码来说明我想要做什么:
ruby-on-rails - 查找返回枚举器,而不是对象
我正在开发一个 Rails 3 应用程序,我的一个控制器中有一条线,如下所示:
这个想法是从数据库中获取一组“特征”,受到一些限制,然后从该集中特别挑选一个。如果有问题的记录存在于数据库中但不符合约束条件,我不想返回它。因此,我正在做@features.find
而不是Feature.find
.
我遇到的问题是视图需要@feature.title
,这会产生错误:
当然,我可以通过用这个替换上面的内容来回避这个问题,在这里我只需定义两次约束:
但这似乎不优雅而且有点多余。
最好的解决方案是什么?如何让我的@features.find
结果按原样处理Feature
,而不是Enumerator
缺少我需要在视图中访问的变量/方法?
感谢您对此的任何想法。
list - C# 尝试使用静态索引计数器创建自己的列表
我想自己做List
一个有能力的工作foreach loop
。还有其他重要的命令List
,比如 IndexOf (这是我唯一不喜欢 List 的地方,因为它是动态变化的)。我列表中的一个必须跟踪所有索引。以及Add
, Contains
, Count
, Remove
, 以及[]
访问器(不知道如何做到这一点)所以现在Get
应该可以解决问题。
List 应该被转换为一个名为 Entity 的基类,该基类在其他两个类 Npc / Player 之间共享,因为它具有相似性。
无论如何,我无法控制客户端我也在编写这个服务器,但是协议规范要求所有玩家跟踪索引,而不需要对常规 List 对索引进行任何剧烈的动态更改。
我一直在学习如何制作自己的教程,Collections
我遇到了 3 个我无法解决的错误。
另外我想问一下我这样做对吗?或者看起来很狡猾的东西。
感谢您的帮助,我很感激.. C# 的这一部分似乎非常先进且难以掌握概念。
实体列表的来源
EntityListEnumerator 的来源
}
file - SSIS如何在使用Foreach ADO枚举器时检索文件名
这是我的问题。我有一个将文件路径返回到完整结果集(即:\server\myfolder)的第一个 SQL 任务,然后我有一个变量“USER::VAR_SQL”,它是一个 System.Object。
然后我将我的执行 SQL 任务连接到一个 foreach 循环容器并在“集合”中选择“Foreach ADO 枚举器”,然后在“变量映射”中作为 ADO 对象变量“USER::VAR_SQL”添加 USER::filepath 作为变量.
现在,如何循环每个 USER::VAR_SQL 值,然后枚举文件夹中的每个文件 *.txt?我找不到访问 myfolder 中文件的方法。
提前谢谢你
ruby - Ruby - 优雅地比较两个枚举器
在 Ruby(1.9.2)中,我有两个来自两个不同来源(二进制数据)的长数字流。
这两个源以两个Enumerators的形式封装。
我想检查两个流是否完全相等。
我提出了几个解决方案,但两者似乎都很不雅。
第一个只是将两者都转换为数组:
这行得通,但在内存方面,它的性能不是很好,特别是在流有很多信息的情况下。
另一种选择是……呃。
那么,有没有更简单、更优雅的方法呢?
haskell - Haskell 枚举器:类似于 iteratees `enumWith` 运算符?
今天早些时候,我为 iteratees 编写了一个小型测试应用程序,它组成了一个 iteratee,用于编写进度,一个 iteratee 用于实际复制数据。我最终得到了这样的价值观:
在查看枚举器库时,我没有看到sequence_
or的类似物enumWith
。我想做的就是组合两个迭代器,以便它们作为一个迭代器。我可以丢弃结果(()
无论如何都会如此)或保留它,我不在乎。(&&&) 来自 Control.Arrow 是我想要的,仅适用于迭代而不是箭头。
我尝试了这两个选项:
第一个复制文件,但不显示进度;第二个显示进度,但不复制文件,因此显然内置 sequence_ 对枚举器的迭代器的影响是运行第一个迭代器直到它终止然后运行另一个,这不是我想要的。我想并行而不是串行运行迭代器。我觉得我遗漏了一些明显的东西,但是在阅读wc
枚举器库的示例时,我看到了这个奇怪的评论:
我想知道这句话是否表明在枚举框架内组合或组合迭代是不可能的。普遍接受的正确方法是什么?
编辑:
似乎没有内置的方法可以做到这一点。Haskell 邮件列表上有关于添加像enumSequence和manyToOne这样的组合器的讨论,但到目前为止,在 enumerator 包中似乎没有任何东西可以提供这种功能。