这是使用浮动对象初始化NSArray的有效方法吗?
NSArray *fatArray = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:6.9],
[NSNumber numberWithFloat:4.7],
[NSNumber numberWithFloat:6.6],
[NSNumber numberWithFloat:6.9],nil];
它有效且感觉正确,只是想确保我走在正确的轨道上。
加里
答案 0 :(得分:32)
正如mouviciel已经写过的,这是做到这一点的方法。当我写这样的东西时,我通常使用一个简单的宏来缩短代码:
#define FBOX(x) [NSNumber numberWithFloat:x]
然后你可以像这样重写代码:
NSArray *fatArray = [NSArray arrayWithObjects:
FBOX(6.9), FBOX(4.7), FBOX(6.6), FBOX(6.9), nil];
宏是邪恶的,但在这种情况下,宏是如此简单,我会使用它。此外,代码对读取的伤害要小一些,尤其是在宏定义不远的情况下。
如果您编写了大量这样的代码,您可以使用带有可变数量的float
参数的自定义初始化程序创建一个类别,但是在结束参数列表时会出现问题。您可以先传递浮点数总数:
- (id) initWithFloats: (int) numFloats data: (float) float1, ...;
但手工计算参数很容易出错。或者你可以使用一些标记参数列表末尾的标记值,例如零,但是这会打开一个叫做浮点比较的全新蠕虫。
请注意,现在您可以简单地写下以下内容:
NSArray *list = @[@6.9, @4.7, @6.6, @6.9];
这不是一个语法梦想成真,但它得到了编译器的正式支持,它比以前的解决方案要好得多。 See the documentation for more goodness
答案 1 :(得分:4)
据我所知,这是一种将浮动物放入NSArray的完全有效的方法。
答案 2 :(得分:3)
float fatArray[] = {6.6, 6.9, 4.7, 6.9};
答案 3 :(得分:1)
我同意mouviciel。由于您无法将简单类型放入Array中,因此这是一种方法。看起来有点奇怪,需要编写很多代码,但它很好。
答案 4 :(得分:1)
如果您要创建大量具有完全相同元素数量的数组,则可以定义一个实现类似以下内容的FloatArrayFactory类:
+ (NSArray *) arrayWithFloat: (float)f;
+ (NSArray *) arrayWithFloat: (float)f1 and: (float)f2;
+ (NSArray *) arrayWithFloat: (float)f1 and: (float)f2 and: (float)f3;
+ (NSArray *) arrayWithFloat: (float)f1 and: (float)f2 and: (float)f3 and: (float)f4;
如果那太冗长,你可以去看看未命名参数的简洁外观:
+ (NSArray *) arr: (float)f1 : (float)f2 : (float)f3;
你可以像这样打电话:
NSArray *a = [Factory arr: 1.0 :2.0 :3.0 :4.0];
答案 5 :(得分:1)
另一个懒惰的选择是只使用NSStrings数组,然后直接从字符串中获取您要查找的值类型。
像这样:
NSArray *arrayOfNumbers = [NSArray arrayWithObjects:@"3.12",@"3.2", @"12", @"15", nil];
float number = [[arrayOfNumbers objectAtIndex:0] floatValue];