如何在Objective-C中创建数字数组?

时间:2013-03-20 14:25:59

标签: objective-c c

我试图创建我的第一个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);

谢谢大家! 沙龙

4 个答案:

答案 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对象。因此,如果要存储intfloat,则需要在添加到集合之前将它们装入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