6

如何在 Objective-C 中创建浮点数数组?是否可以?

4

4 回答 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

对于动态方法,您可以使用NSNumberobject 并将其添加到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

如果你使用的是 Xcode 4.4+,你可以试试这个:

NSArray *a = @[ @1.1f, @2.2f, @3.3f];

是 LLVM 编译器 4.0 的所有新文字。

于 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 回答