objective-c - C/Java/等。 Objective-C 中的样式数组

标签 objective-c arrays data-structures nsarray primitive

我知道 Apple 非常希望您使用 NS 对象而不是真正的原始类型,但我需要数组的功能(即直接访问索引处的项目)。然而,他们似乎非常热衷于使用 NS 对象,以至于我在网上或教科书中找不到关于如何使用基本原始数组的教程。 我想要一些能在 Java 中完成类似操作的东西:

String inventory[] = new String[45];

inventory[5] = "Pickaxe";
inventory[12] = "Dirt";
inventory[8] = "Cobblestone";

inventory[12] = null;

System.out.println("There are " + inventory.length + " slots in inventory: " + java.util.Arrays.toString(inventory));

以下是我在 Objective-C 中得到的最接近的结果,但它无法正常运行:

NSString *inventory[45];

inventory[5] = @"Pickaxe";
inventory[12] = @"Dirt";
inventory[8] = @"Cobblestone";

inventory[12] = nil;

NSArray *temp = [NSArray arrayWithObjects:inventory count:45];
NSLog(@"There are %i slots in inventory: %@", [temp count], [temp description]);

另外,如果可能的话,O-C 中是否有一些东西可以给我数组中非空/非零对象的计数? (这样,我可以知道库存中还剩下多少空间,这样玩家就无法在库存已满的情况下收拾任何东西)

最佳答案

通常,您会使用 NSArray/NSMutableArray,尽管您也可以使用 C 数组。

NSArray(以及大多数 Foundation 集合)不能包含 nil 条目 - 如果需要 ,可以使用 NSPointerArray (OS X) nil 值,或者简单地在 NSArray 中使用 [NSNull null] 来指定 nil

这是使用 NSArray 的程序:

NSMutableArray * inventory = [NSMutableArray array];
for (NSUInteger idx = 0; idx < 45; ++idx) {
  [inventory addObject:[NSNull null]];
}

[inventory replaceObjectAtIndex:5 withObject:@"Pickaxe"];
[inventory replaceObjectAtIndex:12 withObject:@"Dirt"];
[inventory replaceObjectAtIndex:8 withObject:@"Cobblestone"];

[inventory replaceObjectAtIndex:12 withObject:[NSNull null]];

NSArray *temp = [NSArray arrayWithObject:inventory];
NSLog(@"There are %i slots in inventory: %@", [temp count], [temp description]);

Also, if at all possible, is there something in O-C that will give me the count of non-null/non-nil objects in the array?

NSArray 是 CFArray - 它们是“免费桥接”。使用 CFArrayGetCountOfValue[NSNull null] 作为要查找的值。大多数 CF-API 在 NS-API 中都可用,但这个不行。如果经常需要,您可以轻松地将其包装在一个类别中。

关于objective-c - C/Java/等。 Objective-C 中的样式数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005097/

相关文章:

c++ - Unordered_set迭代器随机

ios - 存储试用期日期

javascript - 动态行创建挖空js

ios - 对象数组还有进一步的内部对象数组

javascript - 在 javascript 中循环遍历嵌套数组。无法显示

用于存储 3 维 float 的 C++ 数据结构

objective-c - 如何在没有 Swift 参数的情况下调用 Objective-C `initFoo` 方法?

ios - UISplitViewController 不适用于 iPhone(5 或 6)

iPhone动画效率解决方案、分层问题

arrays - 任意长度的两个非重叠子数组的最大和