我正在尝试将我的python代码转换为Objective-C代码。在python中整数的情况下,iOS或Objective-C世界中开发人员最常用的列表是什么?
例如:
在 Python :l = [[1,1,1,1],[1,1,1,1]]
在 Objective-C :NSArray *数组[@ [@ 1,@ 1,@ 1,@ 1],@ [@ 1,@ 1,@ 1,@ 1]]
这是最好的方式吗?
其他问题:
答案 0 :(得分:2)
您创建阵列的方式是正确的。请记住,您没有输入整数,而是输入NSNumbers
的实例。原始类型无法添加到NSArrays
或NSDictionarys
,这就是您需要@符号的原因。这是将值转换为NSNumber
的简便方法。
您可以像python一样访问您的元素。
NSArray *array = @[@[@1, @2, @3], @[@4, @5, @6]];
NSNumber *one = array[0][0];
NSInteger *oneInt = [one integerValue]; // Integer representation of the first element of the first array.
NSArray *array = @[@[@1, @2, @3], @[@4, @5, @6]];
NSNumber *one = [[array objectForIndex:0] objectForIndex:0];
NSInteger *oneInt = [one integerValue]; // Integer representation of the first element of the first array.
这两种方法都是访问数组元素的平等方式。您使用哪一个更多是个人偏好。我更喜欢较短的版本。
答案 1 :(得分:2)
简短的回答是"这取决于。" Objective-C支持C风格的数组(实际上只是指向内存缓冲区的指针和一些处理指针数学的语义糖)或NSArrays,它们是管理其他对象的容器对象。正如@ user7716368在他们的(非常好的)答案中所说,你不能直接将整数放入NSArray
。您必须创建NSNumber
个对象,其中包含数值的对象包装器。
在Objective-C,不可变和可变阵列中还有两种不同风格的NSArray。一旦创建了不可变数组,就无法对其进行更改。因此,如果您想从嵌套数组中的索引[1] [2]的值中减去6,则必须使嵌套构造中的所有数组都成为可变数组。
如果你需要静态定义的整数数组或整数数组数组,那么使用C语法是值得考虑的:
int intsArray[] = {1, 2, 3, 4};
printf("array index 1 = %d\n", intsArray[1]);
int intsNestedArrays[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};
printf("intsNestedArrays[1,1] = %d\n", intsNestedArrays[1][1]);
请注意,C风格的二维数组不能"参差不齐" (其中第二级数组具有不同数量的条目。)它们必须是矩阵。 Objective-C NSArrays 可以"参差不齐"。
请注意,Swift的数组比Objective-C更敏感。数组是对象,整数是对象,但执行速度几乎与C风格的内存缓冲区数组一样快,并且具有许多非常强大的面向对象和功能。
如果您只是在Objective-C中使用整数数组,那么您应该停止学习Objective-C并切换到Swift。 Objective-C正在走出困境,Swift是大多数人和组织(包括我在内)投入精力的地方。我预测,在5年内,Objective-C将在苹果平台上消失,甚至可能不受支持。
答案 2 :(得分:1)
Q1。访问元素的最佳方法是什么? (使用objectAtIndex?)
Q2。从元素中减去值的最佳方法是什么? (就像Python一样 L [0] [0] -1)
ANS1:
您可以array[0][1];
或[[array objectAtIndex:0] objectAtIndex:1];
进行访问
没有最好的办法,两者都是一样的。
ANS2: 取决于您的问题要求: a)如果你只想计算并存储在另一个变量中,那么:
int var = [array[0][1] intValue] - 2;
b)如果要在扣除后替换值: - 您无法使用NSArray,因为这是固定的。您需要使用NSMutableArray。 所以假设array是NSMutableArray,你可以这样做:
array[0][1] = @([array[0][1] intValue] - 2);