Swift or OC将数组平分成指定个数的二维数组

101 阅读1分钟

需求:在一个一维数组中,需要等分成为二维数组
例:[1,2,3,4,5,6,7] => [[1,2],[3,4],[5,6],[7]]

利用 stride 函数进行等分

OC

- (NSArray *splitArray : (NSArray *array withSubSize : (int)subSize{

    //数组将被拆分成指定长度数组的个数

    unsigned long count = array.count % subSize == 0 ? (array.count /

subSize) : (array .count / subsize + 1);

    用来保存指定长度数组的可变数组对象

    NSMutableArray *arr = [[NSMutableArray alloc] init];

    //利用总个数进行循环,将指定长度的元素加入数组for (int i=0; i < count; i ++){

    //数组下标

    int index =i * subsize;

    //保存拆分的固定长度的数组元素的可变数组

    NSMutableArray *arr1 = [[NSMutableArray alloc] init];

    //移除子数组的所有元素
    
    [arr1 removeAllObjects];

    int i = index ;

    //将数组下标乘以1、2、3,得到拆分时数组的最大下标值,但最大不能超过数组的总大小

    while (j ‹ subSize×(i + 1) && j ‹ array.count) {

        [arr1 addObject: [array objectAtIndex:j]];

        j += 1;

     }

            //将子数组添加到保存子数组的数组中

            [arr addObject: [arr1 copy]];

        }

    return [arr copy];

}

Swift

func splitArrays (array: [Any],size:Int) -> [Any] {

   let count = array.count%size == 0 ? (array.count/size) :

        (array.count/size+1)

        var arr = [Any]()

        for i in 0..<count{

            let index = i*size

            var arr1 = [Any]()

            arr1.removeAll ()

            var j = index

            while (j<size*(i+1) && j < array.count ){

                arr1.append(array[j])

                j += 1

            }

            arr.append (arr1)

        }


}

附加效果图:

image.png