【问题标题】:Get values from NSMutablearray从 NSMutablearray 获取值
【发布时间】:2015-08-17 19:54:57
【问题描述】:

我有一个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];

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

【问题讨论】:

  • 为什么将您的值添加为三个值的字符串?为什么没有数字数组?
  • 也许将 NSMutableArray obj 添加到 NSMutableArray 中?这样您就可以像这样访问它:获取第一列和第一行值的示例:[[anArrayAcel objectAtIndex:0] objectAtIndex:0]
  • 您是在问如何在不同的方法或功能中使用anAreayAcel,或者如何从anArrayAcel 中提取数据以用于不同的功能?

标签: ios objective-c nsstring nsmutablearray


【解决方案1】:

看起来您需要一个数组数组。您改为创建了一个 NSStrings 数组。

这是一种方法:

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

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

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

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

注意:如果所有行都恰好有三个值,xyz,则最好创建一个类来表示三个 floats,而不是使用嵌套数组.

【讨论】:

  • 很好地创建具有属性的类:)
【解决方案2】:

您可以设计一个名为 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] 并且如果您想遍历数组,我们会避免双重循环,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2014-08-13
    • 2013-09-01
    相关资源
    最近更新 更多