2016-10-01 1 views
2

Ich habe zwei Arrays vom Typ CGPoint (allPos und selectedPos) erstellt. Eins enthält das andere. Bitte beachten Sie ein Beispiel von ihnen unter:Wie findet man alle freien Positionen beim Vergleich eines Arrays mit einem anderen?

allPos = [point1,..., point10] 
selectedPos = [point1, point4, point6, point7, point9, point10] 

Alle Punkte haben die gleiche y koordinieren und ich habe angeordnet, um sie von der kleinsten zur größten.

Wie kann ich eine Reihe von Positionen von allPos finden, die nureiner freien Position in Folge oder nur eine in-zwischen freier Position zu haben, wenn selectedPos verglichen? Von meinem obigen Beispiel das wäre

[point5, point8] 

Antwort

0

Alles, was Sie brauchen, ist zu sein selectedPos Array, nach jedem Punkt an den folgenden Positionen anschauen und sehen, ob es (nur) eine leere Stelle oder (nur) 3 und speichert, dass in ein neues Array.

0

ich create simle Beispiel für Sie, die zeigen, wie es möglich ist, die Position der Elemente zu finden, die fehlen.

let first = [1,2,6,8,9,10] 
let second = [1,2,3,4,5,6,7,8,9,10] 

func fetchIndexesWithoutConsecutive(firstArray: [Int], secondArray: [Int]) -> [Int] { 
    //Output array 
    var array = [Int]() 

    //Enumerate second array and compare if first array conteins this elments if not we add postion of the missing item 
    for (index, value) in secondArray.enumerate() { 
     if (!firstArray.contains(value)) { 
      array.append(index) 
     } 
    } 

    guard array.count > 1 else { 
     return array 
    } 

    var result = [Int]() 

    for i in 0...array.count-2 { 
     let first = array[i] 
     let second = array[i+1] 
     if second - first > 1 { 
      result.append(second) 
     } 
    } 

    return result // [6] position of the elements in second array that are not in first array without consecutive 
} 

fetchIndexesWithoutConsecutive(first, secondArray: second) 
+0

danke, aber es löst mein Problem nicht vollständig. Ihr Code wird alle freien Positionen bereitstellen, aber ich bin nur an denen interessiert, die einzelne freie Plätze haben. Mit meinem Beispiel von 'allPos' und' selectedPos' wird der von Ihnen angegebene Code zu '[point2, point3, point5, point8]' führen. Ich brauche nur die einzelnen freien Räume (keine aufeinanderfolgenden freien Räume), die "[Punkt5, Punkt8]" sind. Ich hoffe, das erklärt die Dinge besser – Hilarious404

+0

Es ist schwer zu verstehen, könnten Sie Punkte mit echten Daten beschreiben –

+0

Sagen, ich habe zwei 'Int' Arrays' allPos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 'und' selectedPos = [1, 4, 6, 7, 9, 10] 'angeordnet in einer gegebenen Reihenfolge (aufsteigend). Wenn "allPos" und "selectedPos" verglichen werden, sind die nicht ausgewählten Elemente "[2, 3, 5, 8]". '2',' 3' sind aufeinanderfolgende Elemente und ich möchte keine aufeinanderfolgenden Elemente in meinen Ergebnissen. Aber "5" und "8" sind nicht aufeinander folgend. Also bin ich daran interessiert, dass [5, 8] mein letztes gefiltertes Array ist, da sie die einzigen nicht ausgewählten Elemente sind, die nicht aufeinanderfolgend sind. – Hilarious404

Verwandte Themen