【问题标题】:Increment NSNumber in NSArray在 NSArray 中增加 NSNumber
【发布时间】:2012-12-28 20:52:24
【问题描述】:

我见过this,但需要比这更简单的方法。

如果我有一个 NSNumbers 数组并且我想增加其中一个,我必须这样做吗?

[myMutableArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:[(NSNumber *)[myMutableArray objectAtIndex:index] intValue] + 1]];

myArray = [myArray.mutableCopy replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:[(NSNumber *)[myArray objectAtIndex:index] intValue] + 1]].copy;

如果您出于某种原因决定使用不可变数组。

我知道我总是可以只使用一个 int 数组,但我只是好奇是否有一种简单的方法可以做到这一点。

另外,如果我需要在实现或完整文件(整个 .m)中访问它而不使其成为全局,我应该如何定义一个 int 数组?

是否就像将其放在我的实现/文件顶部一样简单?

static int *myInt;

【问题讨论】:

  • 我觉得这种方式很简单。
  • 您可以使用@() 代替+numberWithInt 使其更简洁:
  • @H2CO3 我想我将它与myInt++的属性或iVar增量进行比较
  • ...并且不将id 转换为NSNumber *。编译器无论如何都会从选择器名称中猜测类型。
  • @Catfish_Man 是的。我想避免在我的问题中写文字,所以我不会混淆任何发现我的问题的人。

标签: objective-c ios nsarray increment nsnumber


【解决方案1】:

正如其他人所说,是的,您需要这么多步骤。使用文字,它可以更容易阅读:

myMutableArray[index] = @( [ myMutableArray[index] intValue] + 1 ) ;

您的第二个代码示例将不起作用,因为 replaceObjectAtIndex:withObject: 返回 void,而不是它所作用的 NSMutableArray。您需要创建 NSArray 的 mutableCopy,然后创建 replaceObject,然后将 NSArray 设置为 NSMutableArray 的 copy

【讨论】:

    【解决方案2】:

    如果您需要能够调整它的大小,我会推荐使用 C++ STL 容器而不是创建一个普通的 int 数组。将实现文件的扩展名重命名为 .mm 而不是 .m

    std::vector<int> numbers = { 2, 4, 6 };
    numbers[1]++; // { 2, 5, 6 }
    

    记得包含容器的定义。

    #import <vector>
    

    【讨论】:

    • 我使用向量的原因是我不必处理 malloc 和 free 部分?对于这种情况,我不需要调整数组的大小,只需随意更改值即可。我仍然想知道为什么向量更好,如果有实际的性能提升,或者诸如此类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多