Wie entferne ich sicher Elemente aus einem Array in einer for-Schleife?

8

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?

    
nipponese 30.01.2016, 11:15
quelle

2 Antworten

9

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.

%Vor%

Warum ist dieser Ansatz besser als das mutieren des Arrays in einem FOR LOOP

  1. Da 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.
  2. 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.
  3. Es ist weniger fehleranfällig . Sie schreiben nicht, was die CPU tun soll, sondern beschreiben, wie die Ergebnisse aussehen sollen. So weniger mögliche Missverständnisse zwischen Ihnen und dem Compiler:)
  4. Sie schreiben weniger Code , was weniger potenzielle Fehler bedeutet.

Dies sind einige der Vorteile des Schreibens von Functional Programming-Code.

    
Luca Angeletti 30.01.2016, 11:31
quelle
1

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:

%Vor%     
Marcus Rossel 30.01.2016 11:27
quelle

Tags und Links