优化的阵列移位方法

jar*_*ryd 5 sorting objective-c nsmutablearray

我有一个NSMutableArray控股,NSStrings例如{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

我希望能够用包装来移动元素.

因此,例如将1移动到中心,移动所有元素,将剩余的元素(越过边界)包裹起来再次开始,反之亦然,例如10到中心.

{7, 8, 9, 10, 1, 2, 3, 4, 5, 6}{6, 7, 8, 9, 10, 1, 2, 3, 4, 5}

是否存在这样的优化sort方法?

Hot*_*cks 2

最有效的方法是创建一个包装对象,该对象维护数组的当前“原点”,并通过添加该原点并对长度取模来重新解释索引。事实上,如果仅在少数位置访问数组,则可以通过 1-2 行内联代码轻松完成。

-(id)objectForIndex:(NSInteger) index {
    NSInteger realIndex = (origin + index) % array.count;
    return [array objectAtIndex:realIndex];
}
Run Code Online (Sandbox Code Playgroud)

(如果它扩展了 NS(Mutable)Array,那么“array”就是“super”。如果只是一个包装器,那么“array”就是一个实例变量。无论哪种情况,“origin”都是一个实例变量/属性。)