for ( tempI = 0; tempI < 10; tempI++ )
{
tempJ = 1;
NSArray *objectsForArray = [NSArray arrayWithObjects:@"array[tempI][tempJ]", @"array[tempI][tempJ+1]", @"array[tempI][tempJ+2]", nil];
}
我可以像上面那样编写代码吗?我需要在(array[][])
中存储浮点值NSArray
。我可以这样做吗?
我的问题是,我有一个矩阵
1.0 0.4 0.3 0.5
2.0 0.4 0.5 0.5
3.0 4.3 4.9 0.5
我需要使用1.0,2.0 3.0检索值(0.4,0.3,0.5)。我怎样才能使用NSDictionary呢? 谢谢
for( tempI = 0; tempI < 5; tempI++)
{
NSDictionary *dictionary[tempI] = [ [NSDictionary alloc] initWithObjects:@"array[tempI][tempI + 1]", @"array[tempI][tempI + 2]", @"array[tempI][tempI + 3]", @"array[tempI][tempI + 4]", @"array[tempI][tempI + 5]", nil];
}
我可以这样写吗? Objective C是否接受它?
我收到错误
error: variable-sized object may not be initialized
答案 0 :(得分:18)
NSArray只能存储对象而不是基元,幸运的是,NSNumber类有一个方便的方法,它接受一个float原语并返回一个float对象:
+ (NSNumber *)numberWithFloat:(float)value
因此您可以像这样填充数组:
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
至于你的具体问题,你可以写:
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];
就使用字典来检索矩阵值而言,我能想到的唯一方法是将矩阵值键入代码:
A1 A2 A3 A4
B1 B2 B3 B4
C1 C2 C3 C4
D1 D2 D3 D4
例如:
NSMutableDictionary *myDictionary;
[myDictionary setObject:[NSNumber numberWithFloat:5.0] forKey:@"A1"];
...
NSNumber *myFloat = [myDictionary objectForKey:@"A1"];
此外,重要的是要指出,无论何时以@“some here”格式编写某些内容,它实际上都是一个NSString对象。所以当你写:
NSArray *objectsForArray = [NSArray arrayWithObjects:
@"array[tempI][tempJ]",
@"array[tempI][tempJ+1]",
@"array[tempI][tempJ+2]",
nil];
这与写作完全相同:
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];
答案 1 :(得分:0)
尝试:
for ( int tempI = 0; tempI < 10; tempI++ )
{
int tempJ = 1;
fl_tempI = float(tempI);
NSArray *objectsForArray = [NSArray arrayWithObjects:@"array[fl_tempI][tempJ]", @"array[fl_tempI][tempJ+1]", @"array[fl_tempI][tempJ+2]", nil];
}