Wie lösche ich Elemente mit grep oder map?

8

Wie verwende ich grep oder map , um Elemente aus einem Array oder einem Verweis auf ein Array zu löschen? Ich habe Probleme mit splice , um ein oder mehrere Elemente aus einem Verweis auf Array zu entfernen, und würde gerne sehen, ob grep oder map mir eine bessere Lösung anbieten können.

%Vor%     
Yetimwork Beyene 29.05.2012, 00:36
quelle

3 Antworten

9

Sie sagen "array or reference array" , als wären es zwei verschiedene Dinge. Das ist verwirrend.

Ich nehme an, dass Sie, nachdem Sie Ihr Array @removedElements benannt haben, nach entfernen die Elemente aus @array suchen und sie in @removedElements einfügen.

%Vor%

Eine einfache Negation des Tests ergibt eine Liste. Sie können auch eine Schleife machen:

%Vor%

Was den Vorteil hat, dass weniger Prüfungen durchgeführt werden.

Um splice zu verwenden, müssen Sie die Indizes verfolgen, und ich bin mir nicht sicher, ob es sich in diesem Fall lohnt. Es würde Ihren Code sicherlich nicht leichter lesbar machen. Ebenso bezweifle ich map wäre viel nützlicher als eine normale Schleife.

    
TLP 29.05.2012, 00:58
quelle
7

Verwenden Sie grep , wenn Sie die Elemente kennen, die Sie behalten möchten.

%Vor%

Wenn Sie stattdessen einen Verweis auf ein Array haben, schreiben Sie

%Vor%

Beachten Sie, dass dadurch das Array nicht verändert wird.

Der Prozess ist ähnlich mit map . Bei einem Test, der Elemente zurückweist, schreibe

%Vor%

Kehre den Sinn des Tests mit

um %Vor%     
Greg Bacon 29.05.2012 01:32
quelle
2

Vielleicht gefällt Ihnen auch die Funktion extract_by von List::UtilsBy . Es ähnelt grep, außer dass es die Elemente aus dem übergebenen Array entfernt.

%Vor%     
LeoNerd 04.06.2012 22:32
quelle

Tags und Links