从 NSMutablearray 获取值

Get values from NSMutablearray

我有一个 NSMutableArray,它有三列,多行有浮点值,像这样:

-0.06,  -0.49,  -0.76;
-1.05,  -0.63,  -0.77;
0.73,  -0.32,  -0.62;
-0.08,  -0.61,  -1.00;
0.15,  -0.42,  -0.91;

我用这行来定义 NSMutableArray (anArrayAcel):

NSString *str = [NSString stringWithFormat:@"%@, %@, %@",self.accX.text,self.accY.text, self.accZ.text];
[anArrayAcel addObject:str];

我需要访问此数据以用于其他功能。如何通过特定索引访问值?

看来您需要一组数组。您创建了一个 NSString 数组。

这是一种方法:

NSMutableArray *row = [
    @[
        [self.accX.text floatValue]
    ,   [self.accY.text floatValue]
    ,   [self.accZ.text floatValue]
    ]
    mutableCopy
];
[anArrayAcel addObject:row];

这个想法是创建一个 NSMutableArray 的数组,大概是在一个事件处理程序中,您可以在其中向数组添加行。如果您不需要嵌套数组可变,请跳过 mutableCopy 部分。

现在您可以按如下方式访问您的数据:

float x = anArrayAcel[row][0];
float y = anArrayAcel[row][1];
float z = anArrayAcel[row][2];

注意:如果所有行都恰好具有三个值,xyz,您最好创建一个 class表示三个 float 而不是使用嵌套数组。

你可以设计一个名为class的Acel如下:

// Acel.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface Acel : NSObject

@property (nonatomic, assign) CGFloat accX;
@property (nonatomic, assign) CGFloat accY;
@property (nonatomic, assign) CGFloat accZ;

- (instancetype)initWithAccX:(CGFloat)accX accY:(CGFloat)accY accZ:(CGFloat)accZ;

@end 

.m如下:

// Acel.m  
#import "Acel.h"
@implementation Acel
- (instancetype)initWithAccX:(CGFloat)accX accY:(CGFloat)accY accZ:(CGFloat)accZ{
    self = [super init];
    if (self) {
        self.accX = accX;
        self.accY = accY;
        self.accZ = accZ;
    }
    return self;

}
@end

ViewController如下:

// ViewController.h
@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *acels;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.acels = [@[] mutableCopy];
    Acel *acel0 = [[Acel alloc] initWithAccX:-1.1f accY:0.2f accZ:0.3f];
    Acel *acel1 = [[Acel alloc] initWithAccX:-1.1444f accY:0.22f accZ:0.33f];
    Acel *acel2 = [[Acel alloc] initWithAccX:-1.1411f accY:0.255f accZ:0.333f];
    [_acels addObject:acel0];
    [_acels addObject:acel1];
    [_acels  addObject:acel2];

    [self accessAccel1X];
}

- (void)accessAccel1X{
    Acel * acel1 = self.acels[1];
    NSLog(@"%f", acel1.accX);

}

在我看来,它比二维数组更优雅。 因为我们不需要 do like [0][1] 并且如果你想遍历数组我们避免了双重循环,