Vollständig offen legen, dies ist für eine Hausaufgabe Frage:
Es sollte eine private Eigenschaft vom Typ [Circle] haben. Ein Array von Kreisen. Die Methode sollte alle Kreise entfernen, deren Radius größer ist als die Mindestanforderung und kleiner als die maximale Anforderung.
Es scheint offensichtlich, dass ich removeAtIndex()
verwenden sollte, um Array-Elemente zu entfernen, die eine in der Schleife bestimmte Bedingung nicht erfüllen. Viele haben jedoch vor den Gefahren des Entfernens von Elementen in einer Schleife hingewiesen, weil ich vermute, dass dies ein "Iterator / Index-Mismatch" ist.
Letztendlich habe ich ein leeres Array erstellt und .append()
verwendet, um die Werte, die die "gute" Bedingung erfüllen, in ein filteredCircles
Array zu pushen, aber ich kann nicht anders als zu fühlen, dass dies nicht der Fall ist die Kriterien für die Zuordnung.
Gibt es eine Lösung, die tatsächlich die Elemente aus dem Array in einer Schleife entfernt?
Wenn FOR LOOP
nicht ist (und ich sehe diese Anforderung nicht im zitierten Text), sollten Sie die Methode filter
verwenden.
Wenn Sie filter
für ein Array aufrufen, erhalten Sie ein neues Array , das nur die Werte enthält, die die an filter
übergebene Schließung betreffen. Das ursprüngliche Array ist nicht mutiert.
circles
eine Konstante ist, haben Sie keine Probleme im Zusammenhang mit Multithreading-Programmierung . Wenn circles
änderbar ist, können andere Threads es ändern, während Sie es mit sehr furchterregenden Nebenwirkungen loopen. filter
kann mehr Elemente gleichzeitig verarbeiten . Die CPU benötigt also weniger Zeit. Z.B. Ein Array von 16 Elementen könnte (abhängig von der Hardware) in 4 internen Schleifen verarbeitet werden. Dies sind einige der Vorteile des Schreibens von Functional Programming-Code.
Um die Antwort von @ vacawama auszuarbeiten:
%Vor% Wenn Sie Double
für Ihre Circle
s radius
verwenden möchten, aber die nette Syntax beibehalten möchten: