我知道如何在Ruby中执行此操作,将一系列数字转换为数组。但是如何在Objective-C中实现呢?
红宝石:
(1..100).to_a
答案 0 :(得分:8)
你必须手动完成:
// Assuming you've got a "NSRange range;"
NSMutableArray *array = [NSMutableArray array];
for (NSUInteger i = range.location; i < range.location + range.length; i++) {
[array addObject:[NSNumber numberWithUnsignedInteger:i]];
}
答案 1 :(得分:4)
从左边开始抛出一个糟糕的解决方案:
我们的想法是让键值编码机制通过索引属性为您创建数组。
接口:
@interface RangeArrayFactory : NSObject {
NSRange range;
}
@end
实现:
- (id)initWithRange: (NSRange)aRange
{
self = [super init];
if (self) {
range = aRange;
}
return self;
}
// KVC for a synthetic array
- (NSUInteger) countOfArray
{
return range.length;
}
- (id) objectInArrayAtIndex: (NSUInteger) index
{
return [NSNumber numberWithInteger:range.location + index];
}
使用:
NSRange range = NSMakeRange(5, 10);
NSArray *syntheticArray = [[[RangeArrayFactory alloc] initWithRange: range] valueForKey: @"array"];
这个解决方案主要是为了好玩,但可能对大范围有意义,其中填充连续数字的真实数组将占用比实际需要更多的内存。
正如Rob Napier在评论中所指出的那样,你也可以继承NSArray
,只需要你实现count
和objectForIndex:
,使用与countOfArray
相同的代码和objectInArrayAtIndex
以上。
答案 2 :(得分:4)
您可能想尝试NSIndexSet
。
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 100)];
答案 3 :(得分:1)
你需要编写一个简单的循环。 Objective-C中没有任何“数字范围”运算符。