Schrift
[thread]11456[/thread]

Eindeutige Liste aller Zeichen im String

Leser: 1


<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten
roli
 2008-03-11 18:39
#106965 #106965
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich suche einen weg, wie ich eine eindeutige Liste aller vorkommenden Zeichen eines Strings erzeugen kann, oder auch, ich will evtl. vorkommende Doubletten loeschen. Die "Ergebnisreihenfolge" ist egal.
Was ich habe ist:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl -w

my $in  = "abcdee3fgh1234eee";
my $out = "";

$out = join("",sort(split("",$in)));
$out =~ s/(.+)\1/$1/g;

print "in : $in\n";
print "out: $out\n";

Ergebnis
in : abcdee3fgh1234eee
out: 1234abcdeeefgh

So geht's also schon mal nicht, leider. Hat jemand eine Idee?
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Linuxer
 2008-03-11 19:04
#106966 #106966
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

z.B. über einen Hash:

Code (perl): (dl )
1
2
3
my %seen;
$seen{$_}++ for ( split( "", $string ) );
print join( '', sort keys %seen ), $/;


Oder mit uniq aus List::MoreUtils (Zusatzmodul).

http://search.cpan.org/~vparseval/List-MoreUtils-0...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
pq
 2008-03-11 19:04
#106967 #106967
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
was noch fehlt: die wunschausgabe
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
 2008-03-11 19:06
#106968 #106968
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code (perl): (dl )
1
2
my %seen;
$string =~ s/(.)/$seen{$1}++ ? "" : $1/gse;
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
roli
 2008-03-11 19:18
#106969 #106969
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
pq+2008-03-11 18:04:55--
was noch fehlt: die wunschausgabe

Oehhhh, was willst du mir damit sagen, irgendwie stehe ich da gerade was auf'm Schlauch
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Gast Gast
 2008-03-11 19:33
#106970 #106970
mit so einem Monster geht es auch:
Code (perl): (dl )
$out=join('', split(/(.)\1+/,join('',sort(split('',$in)))));
Gast Gast
 2008-03-11 19:35
#106971 #106971
Such mal im Internet nach "perl unique array"
roli
 2008-03-12 11:38
#106980 #106980
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Klasse, Problem geloest!

Danke
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Taulmarill
 2008-03-12 16:31
#106982 #106982
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Mir ist da noch eine schöne einzeilige Lösung mit Hashes eingefallen:
Code: (dl )
my $out = join "", sort keys %{ { map{ $_ => 1 } split //, $in } };

In Produktivcode sollte man aber vielleicht lieber die Lösung von Linuxer benutzen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
nepos
 2008-03-12 19:15
#106987 #106987
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Man kann sich auch mal CPAN:List::MoreUtils ansehen. Da gibts auch eine uniq() Funktion, neben vielen anderen nützlichen Sachen.
<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten



View all threads created 2008-03-11 18:39.