如何在 Objective-C 中创建浮点数数组?是否可以?
问问题
20425 次
4 回答
24
您可以通过不同的方式创建动态数组(大小在运行时决定,而不是编译时),具体取决于您希望使用的语言:
Objective-C
NSArray *array = [[NSArray alloc] initWithObjects:
[NSNumber numberWithFloat:1.0f],
[NSNumber numberWithFloat:2.0f],
[NSNumber numberWithFloat:3.0f],
nil];
...
[array release]; // If you aren't using ARC
或者,如果您想在创建后更改它,请使用NSMutableArray
:
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];
[array addObject:[NSNumber numberWithFloat:1.0f]];
[array addObject:[NSNumber numberWithFloat:2.0f]];
[array addObject:[NSNumber numberWithFloat:3.0f]];
...
[array replaceObjectAtIndex:1 withObject:[NSNumber numberWithFloat:99.9f]];
...
[array release]; // If you aren't using ARC
或者使用新的Objective-C 文字语法:
NSArray *array = @[ @1.0f, @2.0f, @3.0f ];
...
[array release]; // If you aren't using ARC
C
float *array = (float *)malloc(sizeof(float) * 3);
array[0] = 1.0f;
array[1] = 2.0f;
array[2] = 3.0f;
...
free(array);
C++ / 目标-C++
std::vector<float> array;
array[0] = 1.0f;
array[1] = 2.0f;
array[2] = 3.0f;
于 2012-10-17T09:54:57.603 回答
3
对于动态方法,您可以使用NSNumber
object 并将其添加到NSMutableArray
,或者如果您只需要静态数组,则使用评论中的建议,或使用 standard C
。
像:
NSMutableArray *yourArray = [NSMutableArray array];
float yourFloat = 5.55;
NSNumber *yourFloatNumber = [NSNumer numberWithFloat:yourFloat];
[yourArray addObject:yourFloatNumber];
然后检索:
NSNumber *yourFloatNumber = [yourArray objectAtIndex:0]
float yourFloat = [yourFloatNumber floatValue];
于 2012-10-17T09:54:29.853 回答
1
于 2012-10-17T10:07:30.973 回答
0
这样的事情怎么样?
@interface DoubleArray : NSObject
@property(readonly, nonatomic) NSUInteger count;
@property(readonly, nonatomic) double *buffer;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithCount:(NSUInteger)count NS_DESIGNATED_INITIALIZER;
- (double)valueAtIndex:(NSUInteger)idx;
- (void)setValue:(double)value atIndex:(NSUInteger)idx;
@end
@implementation DoubleArray
- (void)dealloc
{
if (_buffer != 0) {
free(_buffer);
}
}
- (instancetype)initWithCount:(NSUInteger)count
{
self = [super init];
if (self) {
_count = count;
_buffer = calloc(rows * columns, sizeof(double));
}
return self;
}
- (double)valueAtIndex:(NSUInteger)idx
{
return *(_buffer + idx);
}
- (void)setValue:(double)value atIndex:(NSUInteger)idx
{
*(_buffer + idx) = value;
}
@end
这是一个基本数组。您可以使用更复杂的功能来扩展它,例如附加、索引删除等。
于 2020-02-06T07:48:31.767 回答