【问题标题】:How to declare a two dimensional array of string type in Objective-C?如何在 Objective-C 中声明一个字符串类型的二维数组?
【发布时间】:2010-10-12 21:27:46
【问题描述】:

如何在 Objective-C 中声明一个字符串类型的二维数组?

【问题讨论】:

  • 如果你说的是 NS(Mutable)Array,你不会“声明”它。 NSArray 没有指定的内容类型,因此您只需声明外部数组。如何使用它取决于您。

标签: objective-c arrays nsstring


【解决方案1】:

首先,您可以考虑使用一个类来保存您的内部数组的字符串,或者从 plist 文件中加载它(在其中很容易创建一个二维字符串数组)。

对于直接声明,您有几个选择。如果你想使用 NSArray,你必须手动创建这样的结构:

NSMutableArray *strings = [NSMutableArray array];
for(int i = 0; i < DESIRED_MAJOR_SIZE; i++)
{
    [strings addObject: [NSMutableArray arrayWithObject:@"" count:DESIRED_MINOR_SIZE]];
}

或者,使用数组字面量,您可以获得一个 不可变 版本,如下所示:

NSArray *strings = @[ @[ @"A", @"B", @"C" ], @[ @"D", @"E", @"F" ], @[ @"G", @"H", @"I" ] ]

然后你可以像这样使用它:

NSString *s = [[strings objectAtIndex:i] objectAtIndex:j];

这有点难初始化,但如果你想使用 NSArray 方法,这是要走的路。

另一种方法是使用 C 数组:

NSString *strings[MAJOR_SIZE][MINOR_SIZE] = {0}; // all start as nil

然后像这样使用它:

NSString *s = strings[i][j];

这不那么尴尬,但是您必须小心保留/复制释放 值,因为您将它们放入和从数组中删除。 (当然,除非您使用 ARC!) NSArray 会为您执行此操作,但对于 C 样式的数组,您需要执行以下操作来替换数组:

[strings[i][j] release];
strings[i][j] = [newString retain];

另一个区别是您可以将 nil 放入 C 样式的数组中,但不能放入 NSArrays - 为此您需要使用 NSNull。另请查看 Stack Overflow 问题 Cocoa: Memory management with NSString,了解有关 NSString 内存管理的更多信息。

【讨论】:

    【解决方案2】:

    如果要声明和初始化一个二维字符串数组,可以这样做:

    NSArray *myArray = [NSArray arrayWithObjects:
                           [NSArray arrayWithObjects:@"item 1-1", @"item 1-2", nil],
                           [NSArray arrayWithObjects:@"item 2-1", @"item 2-2", nil],
                           [NSArray arrayWithObjects:@"item 3-1", @"item 3-2", nil],
                           [NSArray arrayWithObjects:@"item 4-1", @"item 4-2", nil],
                           nil];
    

    这样做的好处是为您提供了一个不可变数组。

    【讨论】:

    • 嗨史蒂夫麦克劳德,如果我有这样的 myArray,我如何获得“项目 1-1”的价值。
    • [[myArray objectAtIndex:1] objectAtIndex:1]
    【解决方案3】:

    我可能是自我广告,但我在NSMutableArray 上写了一个包装器,以便轻松用作二维数组。它在 GitHub 上以CRL2DArray 的形式提供。 https://github.com/tGilani/CRL2DArray

    【讨论】:

    • 来自 Android (Java) 我很惊讶在 obj-C 中创建 2D 数组有多么困难,感谢非常有用的 GitHub 先生!
    • 唯一的问题是我希望有更多的内置方法,普通的 NSArray 有像 count 等。但现在我只是手动做!​​span>
    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多