问题标签 [fast-enumeration]

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.

0 投票
4 回答
3384 浏览

objective-c - 你如何停止快速枚举?

一旦你得到你想要的东西,你将如何停止快速枚举。

在 for 循环中,我知道您只需将计数器编号设置为 100 或其他值。例子:

因此,无需将快速枚举转换为前向循环类型的事物(通过将 i 与[array count]如何在过程中停止快速枚举进行比较?

0 投票
3 回答
303 浏览

objective-c - 提高快速枚举性能

我有一个超过 280.000 多个单词的巨大单词列表,这些单词从 sqlite 数据库加载到 NSArray。然后我进行快速枚举以检查用户输入的某个字符串值是否与数组中的某个单词匹配。由于阵列太大,iphone 4 大约需要 1-2 秒才能通过该阵列。

我怎样才能提高性能?也许我应该制作几个较小的数组?字母表中的每个字母一个,这样可以减少要处理的数据。

这就是我的数据库类的外观

然后在我的主视图中我像这样初始化它

最后我使用这种方法遍历数组

0 投票
3 回答
457 浏览

objective-c - 类对象的快速枚举

我正在实现一个应用程序,其中一个类的实例以及类本身都有“孩子”(放置在 a 内NSMutableArray)。这是一个相当复杂的应用程序,但多亏了 Objective-C,它变得轻而易举:类本身就是对象,可以有方法和“变量”(借助静态变量等)。

为了让自己更容易,我在我的实例(使用-)和类(使用+)上实现了访问器/设置器方法来获取和操作“孩子”,而无需直接访问数组。我喜欢尽可能地关闭我的对象,并且这些方法会进行一些数据验证。

我还从协议中实现了一个快速枚举实例方法。NSFastEnumeration问题来了:我可以实现一个快速枚举方法并将它与Objective-C的for...in构造一起使用吗?换句话说,我可以实现这个:

然后在这样的地方使用它:

我查看了将快速枚举实现为宏的 GNUStep 的GSFastEnumeration.h文件,它确认上述是可能的,但我不确定 Apple 是否也这样做。

即使我无法将NSFastEnumeration协议与我的类对象相关联,没有该协议的快速枚举是否可能(并且面向未来)?

0 投票
3 回答
1271 浏览

objective-c - Big Nerd Ranch 目标 C 第 17 章挑战 - 定义类

我在上课时遇到问题。我必须创建作为 NSObject 子类的“StockHolding”对象。我创建实例变量和方法。然后我创建了 3 个包含名称和价格的库存迭代,并将它们加载到一个可变数组中。我很难快速枚举数组中的对象并打印每个对象的属性(价格)。问题是我在尝试枚举对象并打印属性时遇到错误。我尝试了几种不同的方法来解决这个问题,但没有运气。有任何想法吗?我还注意到 currentStock 不是打印名称,而是打印指针位置。也许这些问题是相关的。提前致谢。

'标题'


'执行'


'主要的'

0 投票
1 回答
516 浏览

ios - 使用快速枚举删除 NSManagedObject 是否安全?

您不应该通过快速枚举来修改正在迭代的集合,但我不确定这在多大程度上。下面的代码没有给我带来任何问题,但我不确定是不是我很幸运。有人有明确的答案吗?

所以我并没有真正修改数组,而是从上下文中删除对象,这可能只是间接修改数组,但我不确定。

0 投票
1 回答
431 浏览

javascript - 子类化 JavaScript 数组会破坏快速枚举

我以这种方式使用原型对 Array 进行子类化:

一切正常,我可以用这种方式初始化一个“MyArray”实例:

问题是 MyArray 实例的快速枚举被破坏了,实际上是以下循环:

打印:0、1、2、长度

在实践中,类的每个方法/属性都包含在枚举中。在普通数组中,代码只会打印 0、1、2(这些数字是数组的索引)。

所以...我的问题是:如何通过保留快速枚举来扩展 Array?

ps:在Objective C中,为了实现快速枚举,你必须重写一个方法……在JavaScript中有一个特殊的方法可以重写吗?

注:显然我对“MyArray”的真实实现略有不同,但我贴出的代码足以产生异常的快速枚举循环。不要问我为什么要扩展 Array,我有我的正当理由;)

0 投票
2 回答
399 浏览

objective-c - 这是使用快速枚举的低效方式吗?

我不完全了解枚举速度如何工作的细节,但比较以下两种情况:

对比

在第一个示例中,它是否会在每次迭代时遍历整个链来获取数组?我应该使用第二种方式吗?

0 投票
1 回答
1005 浏览

objective-c - '从不兼容的类型分配给'id''

我正在为 Box2d(用 c++ 编写)实现一个目标 C 包装器。b2Body 在其 userData 字段中保留对其包装器 B2Body 的引用。GetUserData 返回一个 void*。我现在正在实施快速迭代以使 B2Bodies 脱离 B2World。

在下面指示的行中,我从不兼容的类型 'B2Body *' 错误中得到一个 'Assigning to 'id'。为什么?

`

B2Body.h 看起来像这样:#import

0 投票
3 回答
820 浏览

objective-c - 使用 Objective-C,有没有办法将树转换为快速枚举?

如果有一棵树,它有一个rootNode,并且它的子节点指向左和右(二叉树),有没有办法像在 Objective-C 2.0 中那样将它转换为快速枚举?所以我们可以做

最好不用为内存大小构造 O(n) 对象,而是使用诸如 、 或 的NSMutableArray集合NSSet对象NSDictionary

顺序并不重要,但它可能会以深度优先顺序出现。

0 投票
1 回答
34963 浏览

objective-c - enumerateObjectsUsingBlock: 的 BOOL *stop 参数是做什么用的?

我最近一直在使用enumerateObjectsUsingBlock:很多东西来满足我的快速枚举需求,而且我很难理解BOOL *stop枚举块中的用法。

NSArray引用状态

stop:对布尔值的引用。该块可以设置该值以YES停止对数组的进一步处理。该stop论点是仅出论点。您应该只将此布尔值设置YES为块内。

所以当然我可以在我的块中添加以下内容来停止枚举:

据我所知,不明确设置*stopYES没有任何负面影响。枚举似乎在数组末尾自动停止。那么在一个块中使用*stop真的有必要吗?