【问题标题】:NSNumber in arrays, ios数组中的 NSNumber,ios
【发布时间】:2016-08-17 03:41:46
【问题描述】:

我正在尝试学习如何使用 nsnumber 将数字放入数组中。我坚持的确切的事情是,要在数组中构建序列,我们将需要一个循环。在创建序列数组和返回它之间,声明一个 for 循环,其计数器由索引 + 1 限制并递增 1。 由于序列需要前两个数字来计算下一个数字,因此我们需要对序列进行质数。我们需要在循环的前两次迭代中手动传入@0 和@1。这是我目前所拥有的。

(NSArray *)arrayWithFibonacciSequenceToIndex:(NSUInteger)index
{
NSMutableArray *sequence = [NSMutableArray array];

for(NSUInteger i = 0; i < 1; i++)
{
    index = i+1;

}

return sequence;
}

我在正确的轨道上吗?我不确定我的 for 循环是否正确。我是将序列放入 for 循环并在那里添加 nsnumber @0 和 @1 还是将这些数字放入循环外的序列中?

【问题讨论】:

    标签: ios objective-c arrays for-loop nsnumber


    【解决方案1】:

    要在 NSArray 中插入数字,您必须将它们包装在 NSNumber 中:

    NSInteger a = 5;
    NSNumber number = @(a); // ou @5;
    

    要对 2 个 NSNumber 执行数学运算,您必须先将它们转换为整数(或双精度、浮点数...)

    NSNumber * number1 = @1;
    NSNumber * number2 = @6;
    NSInteger sum = [number1 integerValue] + [number2 integerValue];
    

    对于 fib 问题,你的循环是正确的。我的想法是:我在 for 循环中添加我的值,如果我添加第一个或第二个元素,那么我输入一个 0,否则我将最后两个元素相加:

    - (NSArray *) fibbonacciSequenceWithSize:(NSInteger)size
    {
        NSMutableArray * result = [NSMutableArray new];
    
        for(NSInteger idx = 0; i < size ; i ++)
        {
            // first 2 numbers of fib sequence are 1
            if(idx == 0 || idx == 1)
            {
                 [result addObject:@1];
            }
            else
            {
                // Add the 2 previous number
                // F2 = F1 + F0
                NSinteger next = [result[idx - 2] integerValue] + [result[idx - 1] integerValue];
    
                [result addObject:@(next)];
            }
        }
        return [result copy]; // copy the NSMutableArray in a NSArray
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过提供最后两个元素之和的 Fibonacci 函数来清理代码。

      - (NSNumber *)nextFibInArray:(NSArray *)array {
          if (array.count < 2) return @1;
          NSInteger lastIndex = array.count - 1;
          return @([array[lastIndex-1] intValue] + [array[lastIndex] intValue]);
      }
      

      那么循环也更干净了。

      - (NSArray *)fibonacciWithLength:(NSInteger)length {
          NSMutableArray *result = [@[] mutableCopy];
          for (NSInteger i=0; i<length; i++) {
              [result addObject:[self nextFibInArray:result]];
          }
          return result;
      }
      

      我们可以从中减少一些执行时间,但对于足够短的序列,这应该足够清晰和快速。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多