Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8957[/thread]

Operationen auf Arrays -Frage-: Fragen zu shift und co.



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
sKy
 2007-05-01 22:55
#76343 #76343
User since
2006-12-05
10 Artikel
BenutzerIn
[default_avatar]
Ich wollte folgendes in Perl realisieren:

Hinweis: Quellelement ist immer das aktuelle erste Element

Algorithmus umgangsprachlich:
#######################################################################
#Quellelement der Ursprungsliste jeweils mit ALLEN Elementen vergleichen
#
#Kopiere wenn gleich alle gleichen inklusive Quellelement in @gleich
#
#Kopiere Quellelement in @ungleich
#
#
#
#Lösche Duplikate und Quellelement aus Ursprungsliste
########################################################
#
#Wenn ungleich kopiere nur Quellelement in @ungleich
#Lösche Quellelement aus Ursprungsliste

usw.


Hier mein Versuch der aber Mist ist
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for $quellelement(@satz) #Immer erstes Element
{
for $restelement(@satz) #alle anderen Elemente
{
if ($quellelement eq $restelement) #wenn gleich
{
push(@gleich,$quellelement); #Schreibe Quellelement in @gleich
push(@gleich,$restelement); #Schreibe alle anderen die mit dem aktuellen Quellelement identisch sind in @gleich
push(@ungleich,$quellelement);#Schreibe das Quellelement in @ungleich
shift(@satz,$restelement); #Lösche nun aus der Ursprungsliste das Quellelement
} #und die anderen gerade gefundenen identischen Elemente

else
{
push(@ungleich,$quellelement); #Schreibe das Quellelement in @ungleich
#Lösche das Quellelement aus der Ursprungsliste
}

}
}


Kann es jemand nachvollziehen und vielleicht eine bessere Lösung aufzeigen? Sollte allerdings auf Arrayebene sein.

Gruß
sKy\n\n

<!--EDIT|sKy|1178045763-->
Ronnie
 2007-05-01 23:07
#76344 #76344
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Du verwendest nur eine Liste @satz? Was ist ein Quellelement? Das erste Element der Liste?

EDIT: Zeig mal wie die Quellliste aussehen soll und wie die Ergebnisse aussehen sollen. Das ist aufschlussreicher.\n\n

<!--EDIT|Ronnie|1178046771-->
renee
 2007-05-01 23:40
#76345 #76345
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dafür sollte grep geeignet sein.

So ungefähr:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my @satz = qw(das array das durchsucht werden soll);

my (@gleich,@ungleich);

while( @satz ){
my $quell = $satz[0];
push @ungleich, $quell;
for my $i( 0..$#satz ){
if( $satz[$i] eq $quell ){
push @gleich, $satz[$i];
splice @satz, $i, 1;
}
}
(ungetestet)
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/
Strat
 2007-05-02 11:48
#76346 #76346
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
also alles, was in @satz nur einmal vorkommt, nach @ungleich, und alles, was oefter vorkommt, nach @gleich? dann koennte das folgende funktionieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
# zaehlen, wie oft jedes Element vorkommt
my %cache;
$cache{ $_ } ++ foreach @satz;

my( @gleich, @ungleich );

foreach ( keys %cache ) {
$cache{$_} > 1
? push( @gleich, $_ )
: push( @ungleich, $_ );
} # foreach
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Ronnie
 2007-05-02 13:09
#76347 #76347
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Die Variante von Strat habe ich verstanden *freu*
sKy
 2007-05-02 15:14
#76348 #76348
User since
2006-12-05
10 Artikel
BenutzerIn
[default_avatar]
Danke für die bisherigen Antworten:
Also die Idee ist folgende:


Beispielarray:

@satz(hans,maria,jochen,maria,bernd,hans,jochen,maria,hans,)


@gleich(hans,hans,hans,maria,maria,maria,jochen,jochen)

indize war für hans: 1,6,9
also wird danach an pos 1,6,9 gelöscht nachdem das kopieren fertig war

@ungleich besser wäre es wohl einfache ausführung zu nennen

@ungleich(hans,maria,jochen,bernd)

am besten wäre wenn noch die indizes irgendwie gespeichert würde
da die position der duplikate in ein dateiarray übergebwn wird.

Danke bislang!
Gruß
Sky
renee
 2007-05-02 15:30
#76349 #76349
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @satz = qw(hans maria jochen maria bernd hans jochen maria hans);

my (@gleich,%ungleich);

my $counter = 1;
for my $check( @satz ){
next if $ungleich{$check};
for my $i( $counter-1 .. $#satz ){
if( $check eq $satz[$i] ){
push @gleich, $satz[$i];
push @{$ungleich{$satz[$i]}},$i;
}
}
++$counter;
}

print Dumper(\@gleich,\%ungleich);
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/
lichtkind
 2007-05-02 20:58
#76350 #76350
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
Gibts alles schon fertig:
CPAN:Array::Utils
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
renee
 2007-05-02 21:33
#76351 #76351
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Modul macht aber nicht das Geforderte (oder ich habe die Aufgabe falsch verstanden)...
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/
RPerl
 2007-05-02 22:20
#76352 #76352
User since
2006-11-26
384 Artikel
BenutzerIn

user image
[quote=renee,02.05.2007, 19:33]Das Modul macht aber nicht das Geforderte (oder ich habe die Aufgabe falsch verstanden)...[/quote]
ehrlich gesagt haet ich das auch mit dem Modul gemacht. Weil ich bin irgendwie viel zu faul das manuell rumzufummeln wenn's schon 'n praktisches Modul gibt.
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2007-05-01 22:55.