我试图创建我的第一个iphone程序,我意识到制作2个dims的数组或矩阵对我来说很难......: - (
*我如何以及在哪里声明这样的东西(取自java)所以所有的功能都可以看到它:
int[] myArray = new int[6];
*我怎样才能转发这个功能:
public int[] sortArray (int[] myArray){
int tmp;
for (int x = 0; x < myArray.length; x++) {
for (int y = x+1; y < 6; y++) {
if (myArray[y] < myArray[x]) {
tmp = myArray[x];
myArray[x] = myArray[y];
myArray[y] = tmp;
}
}
}
return myArray;
}
*以及我如何调用此功能?
sortArray(myArray);
谢谢大家! 沙龙
答案 0 :(得分:5)
您可以使用一行代码执行此操作:
NSArray *array = @[@[@1, @2, @3],
@[@4, @5, @6],
@[@7, @8, @9]];
了解Objective-C文字here。
答案 1 :(得分:3)
与C一样,
int twoDArray[3][3];
在Objective-C
中NSArray *a=@[@"apple",@"axe",@"ant"];
NSArray *b=@[@"ball",@"book",@"baby"];
NSArray *c=@[@"cup",@"cat",@"cow"];
NSArray *twoDArray=@[a,b,c];
或在一个声明中:
NSArray *twoDArray=@[@[@"apple",@"axe",@"ant"],
@[@"ball",@"book",@"baby"],
@[@"cup",@"cat",@"cow"]];
编辑:
无需将该java函数转换为obj-c方法。
对数组进行排序:
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id str1, id str2) {
return [((NSString *)str1) compare:((NSString *)str2) options:NSNumericSearch];
}];
编辑2 :(删除了对nsstring的不需要的类型转换为id并返回到字符串)
NSArray *sortedArray = [array sortedArrayUsingComparator:^(NSString *str1, NSString *str2) {
return [str1 compare:str2 options:NSNumericSearch];
}];
答案 2 :(得分:1)
在各自的.h文件中声明
NSMutableArray *numbers;
然后在您的.m文件中
numbers = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 6; i++)
[numbers addObject:[NSNumber numberWithInteger:i]];
并在.h中声明为
-(NSMutableArray *)sortArray:(NSMutableArray *)numbers;
这是Objective-C中的翻译方法:
-(NSMutableArray *)sortArray:(NSMutableArray *)numbers
{
NSInteger tmp = 0;
for(int x = 0; x < [numbers count]; x++)
for(int y = x + 1; y < 6; y++)
if([numbers objectAtIndex:y] < [numbers objectAtIndex:x])
{
tmp = [numbers objectAtIndex:x];
[numbers replaceObjectAtIndex:x withObject:[numbers objectAtIndex:y]];
[numbers replaceObjectAtIndex:y withObject:tmp];
}
return numbers;
}
您也可以按如下方式调用objective-c中的方法:
[self sortArray:numbers];
答案 3 :(得分:0)
你似乎(至少)有两个相关但又分开的问题。
1 /如何创建数字数组
Objective-C数组作为不可变的NSArrays(固定内容)或可变的NSMutableArrays(您可以添加删除和随机播放内容)。你编写的函数就是要求一个可变数组。
使用 NSNumber对象创建和填充不可变数组:
NSArray* array = @[@3,@5,@8,@2,@9,@1]; //"@1" is an NSNumber object literal
//access: array[3] etc
多维:
NSArray* arrayOfArrays @[@[@3,@5,@8],@[@2,@9,@1]];
//access: arrayOfArrays[1][2] etc
创建一个空的可变长度可变数组
NSMutableArray* mutableArray = [[NSMutableArray alloc] init];
创建并填充可变长度的可变数组
myArray = [NSMutableArray arrayWithObjects:@3,@5,@8,@2,@9,@1, nil]; //note nil termination
将不可变的NSArray变为可变的NSMutableArray
NSMutableArray* mutableArray = [array mutableCopy];
(但请注意,这只会将顶级渲染为可变,如果它包含不可变的子数组,则它们将保持不变)
Objective-C集合(NSArray,NSDictionary,NSSet)只能保存Objective-C对象。因此,如果要存储int
或float
,则需要在添加到集合之前将它们装入objective-C NSNumber对象,然后再次将它们取消装箱以访问该值。
int x;
float y;
NSNumber xNum = [NSNumber numberWithInt:x]; //box
NSNumber yNum = [NSNumber numberWithFloat:y]; //box
x = [xNum intValue]; //unbox
y = [yNum floatValue]; //unbox
2 /如何翻译代码
这是一个类似的翻译:
创建(可变)myArray对象:
NSMutableArray* myArray = [[NSMutableArray alloc] init];
Populate it:
[myArray addObjects:@3,@6,@8,@1,@9,nil]; //last value is nil to indicate termination
方法:
- sortArray:(NSMutableArray*)myArray
{
id tmp;
for (int x = 0; x < [myArray count]; x++) {
for (int y = x+1; y < 6; y++) {
if ([myArray[y] floatValue] < [myArray[x] floatValue]) {
tmp = myArray[x];
myArray[x] = myArray[y];
myArray[y] = tmp;
}
}
}
}
致电:
[self sortArray:myArray];
要使用对象范围声明,请在@interface部分
中创建一个属性@interface myObject:NSObject
@property (nonatomic, strong) NSMutableArray* myArray;
@end
您仍然需要先创建myArray才能使用它:
self.myArray = [[NSMutableArray alloc] init];
但您可以从对象内的任何位置设置和访问它的值:
self.myArray
并且 - 如果它在公共头文件@interface部分 - 从对象外部:
myObject.myArray