我如何选择数组的第n个值并将它们添加到另一个数组中。
例如,如果我有一个NSArray,它有100个对象,我想添加每个第5个对象?我理解如何选择第5个对象以及如何添加到新数组等,但只是寻找最佳方法来执行此操作。这是用于图像处理,因此将处理最多2m像素值的数组。
是使用for循环的最佳方式吗?
答案 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
来避免包装和展开。这有可能为您提供最大的改进,因为通过消除额外的内存访问以进行解包,它还可以显着提高引用的局部性,这对于缓存使用优化至关重要。