在Java中對(duì)ArrayList進(jìn)行操作時(shí),如何需要將一個(gè)數(shù)組的某一部分復(fù)制到另一個(gè)新的數(shù)組(即值傳遞)塑娇,System提供了一個(gè)靜態(tài)方法arraycopy()景用,我們可以使用它來(lái)實(shí)現(xiàn)數(shù)組之間的復(fù)制打肝,其函數(shù)原型是:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
其中:
src:源數(shù)組娩缰;
srcPos:源數(shù)組要復(fù)制的起始位置蓬痒;
dest:目的數(shù)組;
destPos:目的數(shù)組放置的起始位置;
length:復(fù)制的長(zhǎng)度梧奢。
在使用過(guò)程中,發(fā)現(xiàn)該方法十分方便演痒,不知道是不是有前輩在OC上封裝了此方法亲轨,也沒(méi)有經(jīng)過(guò)查找官方提供的接口,就自己弄了個(gè)函數(shù):
(void)arrayCopy:(NSMutableArray *)src srcPods:(int)srcPods dest:(NSMutableArray *)dest destPods:(int)destPods lenght:(int)length鸟顺;
在使用此方法時(shí)與Java一樣需要注意:
1惦蚊、src and dest都必須是同類型或者可以進(jìn)行轉(zhuǎn)換類型的數(shù)組
2、源的起始位置+長(zhǎng)度不能超過(guò)末尾
3讯嫂、目標(biāo)起始位置+長(zhǎng)度不能超過(guò)末尾
4蹦锋、所有的參數(shù)不能為負(fù)數(shù)
附上方法的實(shí)現(xiàn)和應(yīng)用:(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];
}
}
}
應(yīng)用:NSMutableArray *src = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil];//源數(shù)組
NSMutableArray *dest = [[NSMutableArray alloc]init];//目標(biāo)數(shù)組
[self arrayCopy:src srcPods:0 dest:dest destPods:0 lenght:5];//方法調(diào)用,注意此處參數(shù)destPods的開(kāi)始位置為0
打印結(jié)果:dest is: (
1,
2,
3,
4,
5
)