Schrift
[thread]9146[/thread]

Aus einem norm. Array ein mehrdimensionales Array



<< >> 6 Einträge, 1 Seite
styx-cc
 2007-07-01 20:45
#78115 #78115
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hihi, ich nochmal =)

Aalso.. ich habe hier ein Array, welches spaeter in eine Tk::HList eingetragen werden soll:
Code: (dl )
my @translations = split/<;>/, $translations;

In $translations stehen solche Strukturen:
Code: (dl )
a<;>eine<;>an<;>eine<;>one<;>eine<;>to have a smoke<;>eine rauchen [ugs.]<;>


Logischerweise habe ich jetzt die Einzelworte in @translations.
Jetzt will ich die Daten verarbeiten, ob nun in einer HList oder auf dem Terminal ist erstmal egal, auf jeden Fall sollten sie gepaart ausgegeben werden, hier einer meiner klaeglichen Ansaetze:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
               
sub {

$result_list->deleteAll();

my @translations = translate_query($query);

my $i = 0;

foreach my $trans (@translations) {

$result_list->add($i++, -itemtype => 'text');

}

}

Irgendwie stehe ich da gerade komplett aufm Schlauch, was mich ganz schoen aergert ;)

MfG
Pörl.
renee
 2007-07-02 00:17
#78116 #78116
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn die Reihenfolge egal ist:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

use strict;
use warnings;

my $sep    = '<;>';
my $string = 'a<;>eine<;>an<;>eine<;>one<;>eine<;>to have a smoke<;>eine rauchen [ugs.]<;>';

my %hash = split /$sep/, $string;

while ( my ($key,$val) = each %hash ){
    print $key, " :: ", $val,"\n";
}
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/
styx-cc
 2007-07-02 17:54
#78117 #78117
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Erstmal danke fuer die Antwort..
Schade, ich dachte es waere einfacher aus:
Code: (dl )
my @array = qw/1 2 3 4 5 6/;

ein:
Code: (dl )
@array = ([1,2], [3,4], [5,6]);

zu machen, is halt n bissi doof das erst in nen Hash zu packen und den dann zu sortieren, aber wird schon klappen =)

Danke
MfG
Pörl.
renee
 2007-07-02 18:03
#78118 #78118
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst es auch so machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

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

my $sep    = '<;>';
my $string = 'a<;>eine<;>an<;>eine<;>one<;>eine<;>to have a smoke<;>eine rauchen [ugs.]<;>';
my @info   = split /$sep/, $string;

my @array;
while( @info ){
    push @array, [shift @info, shift @info];
}

print Dumper \@array;


Aber nach Deinem Anfangspost sah es so aus, als könnte man das auch ohne mehrdimensionalem Hash lösen.

Wenn die Reihenfolge wichtig ist, kann man auch CPAN:Tie::IxHash verwenden...
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/
renee
 2007-07-02 18:05
#78119 #78119
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Beispiel mit CPAN:Tie::IxHash:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;
use Tie::IxHash;

my $sep    = '<;>';
my $string = 'a<;>eine<;>an<;>eine<;>one<;>eine<;>to have a smoke<;>eine rauchen [ugs.]<;>';

tie my %hash, 'Tie::IxHash';
%hash = split /$sep/, $string;

while ( my ($key,$val) = each %hash ){
    print $key, " :: ", $val,"\n";
}
\n\n

<!--EDIT|renee|1183385360-->
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/
Ishka
 2007-07-03 12:08
#78120 #78120
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=styx-cc,02.07.2007, 15:54]Erstmal danke fuer die Antwort..
Schade, ich dachte es waere einfacher aus:
Code: (dl )
my @array = qw/1 2 3 4 5 6/;

ein:
Code: (dl )
@array = ([1,2], [3,4], [5,6]);

zu machen, is halt n bissi doof das erst in nen Hash zu packen und den dann zu sortieren, aber wird schon klappen =)

Danke
MfG[/quote]
Das ist auch nicht so schwer:
Code: (dl )
1
2
3
4
5
6
my @neuarray=();
for(0..@array/2-1)
{
push @neuarray, [@array[$_*2,$_*2+1]];
}
@array=@neuarray;
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}
<< >> 6 Einträge, 1 Seite



View all threads created 2007-07-01 20:45.