User since
2004-08-19
5
Artikel
BenutzerIn
Hallo,
wie kann man ein element im array nach dem namen suchen und entfernen? der index des Elements ist nicht fix. Suchstring ist $::hostname:nodeagent mit FFZJ0YM3 als local hostname. Vielen Dank!
arrray:
[1. in nodeagent rh_domain->{default51}: [FFZJ0YM3:admin FFZJ0YM3:nodeagent FFZJ0YM3:maklerserver FFZJ0YM3:myse
rver FFZJ0YM3:nachserver DEFX0YBB:nodeagent FFZJ0YM3:nodeagent FFZJ0YM8:nodeagent FFZJ0YM3:pasclone1 FFZJ0YM3:server1 FFZJ0Y
M3:skserver FFZJ0YM3:testserver FFZJ0YM3:tradeserver FFZJ0YM3:wastestclone1 FFZJ0YM3:wastestclone2 FFZJ0YM3:wastestclone3]
User since
2003-08-06
2246
Artikel
ModeratorIn
so zum Beispiel:
my @array = qw( kerstin peter paul kirsten );
@array = grep { !/paul/ } @array;
print "@array\n";
perldoc -f grep
Die Darstellung Deines Arrays ist ziemlich schwer verständlich. Kennst Du
Data::Dumper? Schau mal, wie der folgende Code es darstellt - das verstehen Perl-Programmierer gut.
use Data::Dumper;
print Dumper \@array;
User since
2004-08-19
5
Artikel
BenutzerIn
vielen Dank für die Hinweise, ich möchte das doppelte element entfernen aus dem
array @array:
use Data::Dumper;
print Dumper \@array;
Output:
$VAR1 = [
'FFZJ0YM3:admin',
'FFZJ0YM3:nodeagent', # 1. vorkommen
'FFZJ0YM3:maklerserver',
'FFZJ0YM3:myserver',
'FFZJ0YM3:nachserver',
'DEFX0YBB:nodeagent',
'FFZJ0YM3:nodeagent', # 2.vorkommen -soll entfernt werden
'FFZJ0YM8:nodeagent',
'FFZJ0YM3:pasclone1',
'FFZJ0YM3:server1',
'FFZJ0YM3:skserver',
'FFZJ0YM3:testserver',
'FFZJ0YM3:tradeserver',
'FFZJ0YM3:wastestclone1',
'FFZJ0YM3:wastestclone2',
'FFZJ0YM3:wastestclone'
];
User since
2003-08-04
771
Artikel
HausmeisterIn
my @array=(...);
my %hash=();
my @arneu=();
for(@array){
push @arneu, $_ unless $hash{$_}++;
}
wobei es vielleicht sinnvoll ist ganz auf einen Hash zu wechseln, wenn dir die Reihenfolge egal ist.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
User since
2005-02-01
181
Artikel
BenutzerIn
Falls das Array nicht zu groß ist, die Reihenfolge unwichtig ist und Speicherplatz keine Rolle spielt, würde ich das Array einfach in einen Hash kopieren. Dann werden die doppelten automatisch entfernt:
my %hash;
foreach my $val (@array) {
$hash{$val}++;
}
mit "keys %hash" bekommst Du dann Dein Array zurück.
Gruß
Thomas
User since
2004-03-22
5697
Artikel
ModeratorIn + EditorIn
@uniq = grep {!$seen{$_}++} @items;
pq hat mir dabei damals geholfen
User since
2004-08-19
5
Artikel
BenutzerIn
Vielen Dank für die Hilfe, der Code war erfolgreich.
User since
2003-08-04
5872
Artikel
ModeratorIn
Noch ein Tipp: Falls das Array nicht zweimal in den Speicher passt, kannst Du statt grep und kopieren das Array "zu Fuß" durchsuchen (um den Index zu ermitteln) und dann das fragliche Element per splice entfernen. (Falls Du mehrere Entfernen willst mache das Rückwärts, sonst stimmen die Indices ev. nicht mehr.)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite