从 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];
注意:如果所有行都恰好具有三个值,x
、y
和 z
,您最好创建一个 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] 并且如果你想遍历数组我们避免了双重循环,
我有一个 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];
注意:如果所有行都恰好具有三个值,x
、y
和 z
,您最好创建一个 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] 并且如果你想遍历数组我们避免了双重循环,