NSArray chỉ có thể lưu trữ các đối tượng, không nguyên thủy, Fortunatly, lớp NSNumber có một phương pháp tiện lợi mà mất một nguyên thủy nổi và trả về một đối tượng nổi như vậy:
+ (NSNumber *)numberWithFloat:(float)value
do đó bạn có thể cư mảng của bạn như thế này:
float exampleFloat = 5.4;
NSArray *anArrayOfFloatObjects = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:10.0],
[NSNumber numberWithFloat:2],
[NSNumber numberWithFloat:4],
[NSNumber numberWithFloat:exampleFloat],
nil]; // Don't forget the nil to signal
// end of the array
Đối với vấn đề cụ thể của bạn, bạn có thể viết:
NSMutableArray *tmpArray; // this is necessary since an NSArray can only be initialized
// once and we will need to have all the objects that will be
// added to the array available to us at once.
tmpArray = [NSMutableArray arrayWithCapacity:12]; // returns an autoreleased empty array
for (int col=0; col<=3; col++) {
for (int row=0; row<=2; row++) {
[tmpArray addObject:[NSNumber numberWithFloat:array[col][row]]];
}
}
NSArray *myArray = [NSArray arrayWithArray:tmpArray];
như xa như sử dụng một từ điển để truy xuất giá trị ma trận, cách duy nhất Tôi có thể nghĩ rằng sẽ tắt mã khóa giá trị ma trận của bạn như vậy:
A1 A2 A3 A4
B1 B2 B3 B4
C1 C2 C3 C4
D1 D2 D3 D4
ví dụ:
NSMutableDictionary *myDictionary;
[myDictionary setObject:[NSNumber numberWithFloat:5.0] forKey:@"A1"];
...
NSNumber *myFloat = [myDictionary objectForKey:@"A1"];
Ngoài ra, điều quan trọng là chỉ ở đây là bất cứ khi nào một cái gì đó được viết dưới định dạng @ "một cái gì đó ở đây", nó theo nghĩa đen là một đối tượng NSString. vì vậy khi bạn viết:
NSArray *objectsForArray = [NSArray arrayWithObjects:
@"array[tempI][tempJ]",
@"array[tempI][tempJ+1]",
@"array[tempI][tempJ+2]",
nil];
này là chính xác giống như thành văn bản:
NSString *newString = @"Roses are red"; // example strings
NSString *newString1 = @"Violets are blue";
NSString *newString2 = @"array[tempI][tempJ+1]";
NSString *newString3 = @"These are all string objects";
NSArray *objectsForArray = [NSArray arrayWithObjects:
@"array[tempI][tempJ]",
newString2,
@"array[tempI][tempJ+2]",
nil];
Tôi có thể hỏi tại sao bạn muốn để lưu trữ một ma trận 3D vào NSArray? – Prcela