Schrift
[thread]5927[/thread]

Gleichzeitiges löschen mehrerer Array-Elemente

Leser: 1


<< >> 4 Einträge, 1 Seite
Ronnie
 2003-11-25 12:48
#72793 #72793
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich wollte aus einem Array (@$entries) gleichzeitig alle Elemente löschen deren Index in einem anderen Array (@remove) vorliegen. Ich habe folgende Lösung:

Code: (dl )
1
2
3
4
5
6
7
  my $reduced_entries = [];
 my $i=0;
 for my $entry (@$entries) {
   push @$reduced_entries, $entry unless (grep $_ == $i, @remove);
   $i++;
   }
 $entries = $reduced_entries;


Mein erster Gedanke war ja über das @remove-Array zu iterieren und jedes Element aus dem @$entries-Array zu splicen. Dies fällt aber aus, da mit jedem splicen sich der Index meiner Elemente ändert.

Gibt es noch eine elegantere Lösung für dieses Problem?\n\n

<!--EDIT|Ronnie|1069757406-->
pq
 2003-11-25 13:47
#72794 #72794
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
es wäre schön, wenn du kurz ein paar beispieldaten und beispiel-ergebnisse gezeigt
hättest, denn aus deinem code rauszulesen, was du eigentlich machen willst, ist nicht
so einfach. wie wäre es hiermit:
Code: (dl )
1
2
delete $array[$_] for @remove;
@array = grep {defined} @array;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2003-11-25 13:51
#72795 #72795
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
oder auch:
Code: (dl )
splice @array,$_,1 for reverse @remove;


Edit: das setzt natürlich voraus, dass @remove die indizes in geordneter
reihenfolge enthält. ansonsten ein geeignetes sort davorpacken\n\n

<!--EDIT|pq|1069761254-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Ronnie
 2003-11-25 14:00
#72796 #72796
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=pq,25.11.2003, 12:47]es wäre schön, wenn du kurz ein paar beispieldaten und beispiel-ergebnisse gezeigt hättest, ...[/quote]
Ich gelobe Besserung! Deine zweite Lösung ist sehr elegant, dadurch dass die hinteren Einträge zuerst gelöscht werden bekommt man keine Probleme mit verschobenen Elementen.

Viele Dank!
<< >> 4 Einträge, 1 Seite



View all threads created 2003-11-25 12:48.