Objective c PHP范围函数的目标C等价物?
我想快速创建一个从0到10000的数字数组,但步进增量为500,数组如下所示:Objective c PHP范围函数的目标C等价物?,objective-c,Objective C,我想快速创建一个从0到10000的数字数组,但步进增量为500,数组如下所示: @[@0, @500, @1000, ... @10000] 在PHP中,这是内置于函数中的,您可以像这样生成它:范围(0,10000,500) 我并不是真的在寻找答案,比如在一些初始数组上循环,或者在0-10000的数字上循环,使用模或其他什么,我只是想知道是否有一个内置函数或通用的缩写来实现这一点没有像Objective-C中那样的内置函数。正如您所暗示的,最好的方法是如下循环: NSMutableArray
@[@0, @500, @1000, ... @10000]
在PHP
中,这是内置于函数中的,您可以像这样生成它:范围(0,10000,500)
我并不是真的在寻找答案,比如在一些初始数组上循环,或者在0-10000的数字上循环,使用模或其他什么,我只是想知道是否有一个内置函数或通用的缩写来实现这一点没有像Objective-C中那样的内置函数。正如您所暗示的,最好的方法是如下循环:
NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i <= 10000; i += 500) {
[array addObject:@(i)];
}
NSMutableArray*array=[[NSMutableArray alloc]init];
对于(NSInteger i=0;i如果您想要快速创建一个大数组,或者一个范围数组,那么您可以创建一个数组,该数组实际上并不存储所有值,而是根据需要动态计算它们
要将NSArray
子类化,只需实现两种方法,count
和objectAtIndex:
,子类就可以成为一个完整的数组
这是一个实现,非常简单,没有注释;-)
HTH聪明!回答得很好。
+ (NSArray *)rangeWithStart:(NSInteger)start end:(NSInteger)end step:(NSInteger)step {
NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSInteger i = start; i <= end; i += step) {
[array addObject:@(i)];
}
return [array copy];
}
@interface RangeArray : NSArray
- (instancetype) initWithStart:(NSInteger)start end:(NSInteger)end step:(NSInteger)step;
@end
@implementation RangeArray
{
NSInteger start, end, step;
NSInteger count;
}
- (instancetype) initWithStart:(NSInteger)_start end:(NSInteger)_end step:(NSInteger)_step
{
self = [super init];
if (self)
{
start = _start;
end = _end;
step = _step;
count = (end >= start && step > 0) || (end < start && step < 0) ? 1 + (end - start) / step : 0;
}
return self;
}
- (NSUInteger) count { return count; }
- (id) objectAtIndex:(NSUInteger)index { return @(start + step * index); }
@end
RangeArray *range = [RangeArray.alloc initWithStart:0 end:10000 step:500];