将一个数组的某一部分复制到另一个新的数组
在Java中对ArrayList进行操作时,如何需要将一个数组的某一部分复制到另一个新的数组(即值传递),System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制,其函数原型是:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
其中:
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度。
在使用过程中,发现该方法十分方便,不知道是不是有前辈在OC上封装了此方法,也没有经过查找官方提供的接口,就自己弄了个函数:
-
(void)arrayCopy:(NSMutableArray *)src srcPods:(int)srcPods dest:(NSMutableArray *)dest destPods:(int)destPods lenght:(int)length;
在使用此方法时与Java一样需要注意:
1、src and dest都必须是同类型或者可以进行转换类型的数组
2、源的起始位置+长度不能超过末尾
3、目标起始位置+长度不能超过末尾
4、所有的参数不能为负数
附上方法的实现和应用: -
(void)arrayCopy:(NSMutableArray *)src srcPods:(NSInteger)srcPods dest:(NSMutableArray *)dest destPods:(NSInteger)destPods lenght:(NSInteger)length{
if (src == nil) {
return;
}
if (srcPods < 0 || destPods < 0 || length < 0|| srcPods>src.count) {
return;
}
if (src == dest && srcPods< destPods && destPods < srcPods+length) {
for (NSInteger i = length - 1; i >= 0 ; --i) {
dest[destPods + i] = src[srcPods + i];
}
}else{
for (int i = 0; i < length; ++i) {
dest[destPods+i] = src[srcPods+i];
}
}
}
应用:NSMutableArray *src = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil];//源数组
NSMutableArray *dest = [[NSMutableArray alloc]init];//目标数组
[self arrayCopy:src srcPods:0 dest:dest destPods:0 lenght:5];//方法调用,注意此处参数destPods的开始位置为0
打印结果:dest is: (
1,
2,
3,
4,
5
)