2017-06-19 5 views
-2

Bitte folgenden Code betrachten:Swift keep Bezug auf alte Array

func arrayEcludingDivingByP (p: Int, arrToCheck : [Int]) -> Array<Int>{ 

    var tmp : [Int] = [] 

    for (ob, index) in arrToCheck.enumerated() { 

     var isDividible : Bool = ob % p == 0 ? true : false 

     if (!isDividible){ 
      tmp.append(ob) 
     } 
    } 

    return tmp 
} 

var p : Int = 2 

func getSimpleNumbersArrayFromArray (p : Int, arrPassed : [Int]) -> Array <Int>{ 

    var tmp : [Int] = [] 
    tmp = arrPassed 

    for i in 0...5 { 
     tmp = arrayEcludingDivingByP(p: p+i, arrToCheck: tmp) 
     print("tmp array? \(tmp)") 

    } 
    return tmp 


} 

arrayEcludingDivingByP Funktion einfach neues Array zurück, ohne Gegenstände, die für bestimmtes Multiplikator (p) ohne Teilung multipliziert.

getSimpleNumbersArrayFromArray contain loop for 6 iterates, that should output array, which Int objects are not dividible by 0...5 accordingly. 

Aber irgendwie ist es immer referrence zu alter Array halten, die Anordnung von Zahlen von 1 bis 100. In Konsole es ausgegeben wird, folgende:

tmp array? [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97] 
tmp array? [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47] 
tmp array? [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 18, 19, 21, 22, 23, 25, 26, 27, 29, 30, 31] 
tmp array? [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23] 
tmp array? [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17] 
tmp array? [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13] 

Warum ist es passiert? Es sollte in der zweiten Iteration keine geraden Zahlen enthalten, tut es aber.

+0

Unklar was Sie fragen. – nayem

+0

Wie ich verstehe, haben Sie eine Art Filter erstellt? Wenn Ihr Array 0 - 100 kommt, versuchen Sie, durch "p" zu teilen. Jeder Wert, der nicht teilbar ist, sollte für den nächsten Durchlauf entfernt werden, oder? Wenn ich recht habe, ist sein Problem, dass es in der nächsten Runde so aussieht, als würde es von Anfang an mit dem Array beginnen. z.B. das erste Array hat keine 2, das nächste hat es und so weiter mit anderen Werten. –

Antwort

2

Sie haben Ihre Aufzählung falsch angegeben. Das erste Element ist der Index, das zweite Element ist das eigentliche Element (siehe here):

for (index, ob) in arrToCheck.enumerated() { 
... 

die das Problem lösen sollte.

Verwandte Themen