2016-08-17 2 views
0

Ich versuche zu lernen, wie Sie Zahlen in ein Array mit NsNumber setzen. Genau das, was ich feststelle, ist: Um die Sequenz im Array zu erstellen, brauchen wir eine Schleife. Zwischen dem Erstellen des Sequenzarrays und dem Zurückgeben des Sequenzarrays deklarieren Sie eine for-Schleife, deren Zähler durch Index + 1 begrenzt und um eins erhöht wird. Da die Sequenz die zwei vorherigen Zahlen benötigt, um die nächste zu berechnen, müssen wir die Sequenz primen. Wir müssen @ 0 und @ 1 bei den ersten beiden Iterationen der Schleife manuell übergeben. Das habe ich bisher.NSNumber in Arrays, IOS

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

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

} 

return sequence; 
} 

Bin ich auf dem richtigen Weg? Ich bin mir nicht sicher, ob meine for-Schleife korrekt ist. Setze ich die Sequenz in die for-Schleife und füge dort die nsnumber @ 0 und @ 1 hinzu oder setze ich diese Zahlen in die Sequenz außerhalb der Schleife?

Antwort

1

Um eine Nummer in einer NSArray einsetzen, können Sie sie in einem NSNumber zu wickeln haben:

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

mathematische Operationen auf 2 NSNumbers auszuführen, müssen Sie sie konvertieren (oder Doppel integer, float .. .) vor

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

für das fib-problem ist youre loop korrekt. Die Art, wie ich das denke, ist: Ich füge meinen Wert in der for-Schleife hinzu, und wenn ich das 1. oder 2. Element hinzufüge, dann gebe ich eine 0, sonst summiere ich die letzten 2 Elemente:

- (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 
} 
0

Sie können den Code bereinigen, indem Sie eine Fibonacci-Funktion verwenden, die die Summe der letzten beiden Elemente bereitstellt.

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

Dann ist die Schleife auch sauberer.

Wir könnten etwas Ausführungszeitfett davon abschneiden, aber für kurze genug Sequenzen sollte dies klar und schnell genug sein.