美文网首页
将一个数组的某一部分复制到另一个新的数组

将一个数组的某一部分复制到另一个新的数组

作者: 钦点秀才 | 来源:发表于2017-09-22 08:43 被阅读170次

    在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
      )

    相关文章

      网友评论

          本文标题:将一个数组的某一部分复制到另一个新的数组

          本文链接:https://www.haomeiwen.com/subject/whpxextx.html