从NSMutablearray

时间:2015-08-17 19:54:58

标签: ios objective-c nsstring 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];

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

2 个答案:

答案 0 :(得分:1)

看起来你需要一个数组数组。你做了一个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,那么最好创建一个代表三个float的类而不是使用嵌套数组。

答案 1 :(得分:0)

你可以设计一个名为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);

}

在我看来,与二维数组相比,它更优雅。 因为我们不需要像[0] [1]那样做,如果你想迭代数组我们避免双循环,