选择NSArray的第n个值

时间:2016-02-16 04:21:14

标签: objective-c swift

我如何选择数组的第n个值并将它们添加到另一个数组中。

例如,如果我有一个NSArray,它有100个对象,我想添加每个第5个对象?我理解如何选择第5个对象以及如何添加到新数组等,但只是寻找最佳方法来执行此操作。这是用于图像处理,因此将处理最多2m像素值的数组。

是使用for循环的最佳方式吗?

2 个答案:

答案 0 :(得分:2)

你可以使用跨步:

    .stride(to: 100, by: 5)

所以要创建一个新数组:

    Array(0.stride(to: 10, by: 2).map( { myArray[$0] }))

更新:正如Leo Dabus所指出的,上面将从元素0开始(并且每隔2秒)。如果你想从5日开始,每5日开始,你会使用:

    Array(4.stride(to: 100, by: 5).map( { myArray[$0] }))

答案 1 :(得分:0)

使用循环非常好:它们易于阅读,并且与您可能希望用于此目的的任何其他内容一样高效。 for循环方法的唯一优化是预先保留特定数量的元素,因为您知道要编写多少元素。

如果要从多个数组中进行相同的选择(例如处理数组数组),请考虑创建NSIndexSet,并将其与objectsAtIndexes一起应用以执行选择。这可能会使您的代码具有更好的可读性,因为用于创建索引的for循环将与选择过程分开。

最后,如果您需要针对速度进行优化,并且数组存储包装的基元,请考虑使用普通数组而不是NSArray来避免包装和展开。这有可能为您提供最大的改进,因为通过消除额外的内存访问以进行解包,它还可以显着提高引用的局部性,这对于缓存使用优化至关重要。