Schrift
[thread]6857[/thread]

Element aus array

Leser: 1


<< >> 9 Einträge, 1 Seite
kerstin
 2005-04-06 14:09
#53403 #53403
User since
2004-08-19
5 Artikel
BenutzerIn
[default_avatar]
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]
Relais
 2005-04-06 14:58
#53404 #53404
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
so zum Beispiel:
Code: (dl )
1
2
3
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 CPAN:Data::Dumper? Schau mal, wie der folgende Code es darstellt - das verstehen Perl-Programmierer gut.
Code: (dl )
1
2
use Data::Dumper;
print Dumper \@array;
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
renee
 2005-04-06 15:02
#53405 #53405
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
my @array = grep{$_ ne $suchstring}@array;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kerstin
 2005-04-06 19:40
#53406 #53406
User since
2004-08-19
5 Artikel
BenutzerIn
[default_avatar]
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'
];
Ishka
 2005-04-06 19:47
#53407 #53407
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
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}
sesth
 2005-04-06 19:48
#53408 #53408
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
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:
Code: (dl )
1
2
3
4
my %hash;
foreach my $val (@array) {
$hash{$val}++;
}

mit "keys %hash" bekommst Du dann Dein Array zurück.
Gruß
Thomas
lichtkind
 2005-04-06 20:13
#53409 #53409
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
@uniq = grep {!$seen{$_}++} @items;

pq hat mir dabei damals geholfen
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
kerstin
 2005-04-07 13:30
#53410 #53410
User since
2004-08-19
5 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für die Hilfe, der Code war erfolgreich.
Crian
 2005-04-07 15:45
#53411 #53411
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
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
<< >> 9 Einträge, 1 Seite



View all threads created 2005-04-06 14:09.