前言
复习下数组的使用方式,仿照List用oc实现下数组的增删改查
功能
- 初始化时给定数组的容量
- 插入数据
- 删除数据
- 根据下标返回数据
代码
-
声明头文件
头文件中包含了6个对象方法,如下:-
initWithCapacity
用于初始化数组容量 -
find
根据下标查找数据 -
remove
根据下标删除数据 -
insert
根据下标插入数据 -
add
尾部追加数据 -
printAll
打印所有数据
-
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface CustomArray : NSObject
//初始化方法
- (instancetype) initWithCapacity: (NSUInteger) capacity;
//根据下标返回对应的值
- (id)find:(NSUInteger) index;
//根据下标删除对应的值
- (void)remove:(NSUInteger) index;
//插入指定位置
- (void)insert:(id)anObject atIndex:(NSUInteger) index;
//尾部追加
- (void)add: (id)anObject;
//打印所有
- (void)printAll;
@end
NS_ASSUME_NONNULL_END
-
各个方法的实现
-
定义成员变量
@implementation MyArray { //可变数组 @private NSMutableArray *_data; //起始容量 NSUInteger _capacity; //数组中存储的数据大小 NSUInteger _count; }
-
initWithCapacity
初始化,传入起始容量。
- (instancetype)initWithCapacity:(NSUInteger)capacity { self = [super init]; if (self) { _data = [NSMutableArray arrayWithCapacity:capacity]; _capacity = capacity; _count = 0; } return self; }
-
find
根据下标返回元素
- (id)find:(NSUInteger)index { if (index >= _count) { return nil; } return _data[index]; }
-
remove
根据下标,删除数据
- (void)remove:(NSUInteger)index { if (index >= _count) { [NSException raise:NSRangeException format:@"Index out of rang."]; } for (NSUInteger i = index; i < _count - 1; i++) { _data[i] = _data[i + 1]; } _count--; }
删除数据时,后边的元素依次向前移一个位置,同时,总数-1
-
insert
根据下标,插入数据
- (void)insert:(id)anObject atIndex:(NSUInteger)index { if (index >= _count || _capacity == _count) { [NSException raise:NSRangeException format:@"Index out of range."]; } for (NSUInteger i = _count - 1; i >= index; i--) { _data[i + 1] = _data[i]; } _data[index] = anObject; _count++; }
插入数据时,后边的元素依次向后一个位置,同时,总数+1
-
add
添加一个数据
- (void)add:(id)anObject { if (_count == _capacity) { [NSException raise:NSRangeException format:@"Array is full."]; } [_data addObject:anObject]; _count++; }
-
printAll
- (void)printAll { for (id obj in _data) { NSLog(@"%@",obj); } }
-
所有的操作,一定要注意**下标**的判断!