0

我试图创建我的 iphone 程序,我意识到制作 2 个暗淡的数组或矩阵对我来说很困难...... :-(

*我如何以及在哪里声明这样的事情(取自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

4 回答 4

5

你可以用一行代码做到这一点:

NSArray *array = @[@[@1, @2, @3],
                   @[@4, @5, @6],
                   @[@7, @8, @9]];

在此处了解 Objective-C 文字。

于 2013-03-20T14:35:57.947 回答
3

和 C 一样,

int twoDArray[3][3];

在客观-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];
}];
于 2013-03-20T14:31:37.410 回答
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];
于 2013-03-20T14:35:50.390 回答
0

您似乎在这里有(至少)两个相关但独立的问题。

1/ 如何创建一个数字数组

Objective-C 数组以不可变 NSArray(固定内容)或可变 NSMutableArray(您可以添加删除和随机播放内容)的形式出现。你写的排序函数要求一个可变数组。

使用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 对象。因此,如果要存储ints 或floats,则需要在添加到集合之前将它们装箱到 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
于 2013-03-20T14:52:29.497 回答