Schrift
[thread]5893[/thread]

hash of arrays: Ist ein String in mehreren Arrays ?



<< >> 10 Einträge, 1 Seite
schnuffi
 2003-11-10 17:12
#70868 #70868
User since
2003-09-26
17 Artikel
BenutzerIn
[default_avatar]
Problem:
Ich habe 2 getrennte Hashs of Array.
Nun will ich schauen ob ein string sowohl in einem bestimmten array des ersten "hashes of arrays", als auch in dem bestimmten 2 array des zweitens "hashes of arrays" vorhanden ist!

erst dann darf der string in einem anderen array auftauchen.(dieser array hat nichts mit den arrays aus den 2 hashs of array zu tun)


hier konkret:
Quote
%tosca =(
kein => ["Linux","HP","Sun","IBM","SGI"],
tosca45 => ["Linux","HP","Sun","IBM","SGI"],
tosca451 => ["Linux","HP","Sun","IBM","SGI"],
tosca452 => ["Linux","HP","Sun","IBM","SGI"],
tosca50 => ["Linux","HP","Sun","IBM","SGI"],
tosca50B => ["Linux","HP","Sun","IBM","SGI"],
);



%solver =(
Nastran => ["Linux","HP","Sun","IBM","SGI"],
Solver1 => ["Linux","HP","Sun","IBM","SGI"],
Solver2 => ["Linux","HP","Sun","IBM","SGI"],
Solver3 => ["Linux","HP","Sun","IBM","SGI"],
Solver4 => ["Linux","HP","Sun","IBM","SGI"],
Solver5 => ["Linux","HP","Sun","IBM","SGI"],
Solver6 => ["Linux","HP","Sun","IBM","SGI"],
);


jede toscaversion unterstützt einige plattformen
und jeder solver unterstützt bestimmte plattformen
bei auswahl einer version und eines solvers dürfen nur die plattformen angeboten werden die auch version und gleichzeitig plattform unterstützen.

diese plattformen sollen dann angezeigt werden.
(hier unterstützt noch jede version und jeder solver noch jede plattform= beispiel ist noch nicht ausgearbeitet)
format_c
 2003-11-10 17:25
#70869 #70869
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich steh irgendwie auf dem Schlauch. Kannst du mal ein Beispiel szenario geben?

Gruß Alex
Crian
 2003-11-10 17:26
#70870 #70870
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Du möchtest die Schnittmenge zweier Arrays anzeigen, stimmts?
(nämlich etwa der Arrays @$tosca[1] und @$solver[3])

Das müsste ja ungefähr so gehen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use strict;
my @ar1 = ('eins', 'zwei', 'drei', 'vier');
my @ar2 = ('null', 'vier', 'sieben', 'eins');

my @schnitt = array_schnitt(\@ar1, \@ar2);

print "@schnitt";

sub array_schnitt {
   my $ar1 = shift;
   my $ar2 = shift;

   my @result = ();

   for my $elem (@$ar1) {
push @result, $elem if grep $elem eq $_, @$ar2;
   }

   return @result;
}
\n\n

<!--EDIT|Crian|1068479028-->
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
schnuffi
 2003-11-10 17:32
#70871 #70871
User since
2003-09-26
17 Artikel
BenutzerIn
[default_avatar]
genauso so ist es!
ich möchte beispielsweise angeben welche plattformen zur verfügung stehen, falls der benutzer version XY auswählt und plattform XY auswählt!

sprich welche plattformen stehen sowohl unter tosc 452 als auch unter solver 2 zur verfügung

in meinem beispiel oben wären das alle 5 plattformen,weil sich die arrays komplett überschneide.
pq
 2003-11-10 17:33
#70872 #70872
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
my ($version,$solver) = @ARGV;
my %platforms = map {$_ => 1} @{$tosca{$version}};
my %platforms2 = map {$_ => 1} @{$solver{$solver}};
my @platforms = grep {$platforms2{$_}} keys %platforms;
print "@platforms\n";                        
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
format_c
 2003-11-10 17:37
#70873 #70873
User since
2003-08-04
1706 Artikel
HausmeisterIn
[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
24
25
26
27
28
29
30
31
32
33
use strict;

my %tosca =(
kein => ["Linux","HP","Sun","IBM","SGI"],
tosca45 => ["Linux","HP","Sun","IBM","SGI"],
tosca451 => ["Linux","HP","Sun","IBM"],
tosca452 => ["Linux","HP","Sun","IBM","SGI"],
tosca50 => ["Linux","HP","Sun","IBM","SGI"],
tosca50B => ["Linux","HP","Sun","IBM","SGI"],
);



my %solver =(
Nastran => ["Linux","HP","Sun","IBM","SGI"],
Solver1 => ["Linux","HP","Sun","IBM","SGI"],
Solver2 => ["Linux","HP","Sun","IBM","SGI"],
Solver3 => ["Linux","HP","Sun","IBM","SGI"],
Solver4 => ["Linux","HP","IBM","SGI"],
Solver5 => ["Linux","HP","Sun","IBM","SGI"],
Solver6 => ["Linux","HP","Sun","IBM","SGI"],
);

my $tosca = 'tosca451';
my $solver = 'Solver4';

for my $name (@{$tosca{$tosca}}) {
print "$name\n" if grep($name eq $_,@{$solver{$solver}});
}
_ _ END _ _
Linux
HP
IBM


TIMTOWTDI

Gruß Alex
Crian
 2003-11-10 17:39
#70874 #70874
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
[quote=schnuffi,10.11.2003, 16:32]genauso so ist es!
ich möchte beispielsweise angeben welche plattformen zur verfügung stehen, falls der benutzer version XY auswählt und plattform XY auswählt!

sprich welche plattformen stehen sowohl unter tosc 452 als auch unter solver 2 zur verfügung

in meinem beispiel oben wären das alle 5 plattformen,weil sich die arrays komplett überschneide.[/quote]
Ich hab den Code oben mit eineditiert, Du kannst die Funktion dann mit my @schnitt = array_schnitt($tosca[1], $solver[3]); o.ä. aufrufen.
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
Crian
 2003-11-10 17:40
#70875 #70875
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
[quote=format_c,10.11.2003, 16:37]TIMTOWTDI[/quote]
Jau, aber eine Funktion anzubieten, dürfte für den Fragenden am bequemsten sein :-)\n\n

<!--EDIT|Crian|1068478872-->
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
schnuffi
 2003-11-10 17:47
#70876 #70876
User since
2003-09-26
17 Artikel
BenutzerIn
[default_avatar]
erst mal vielen vielen dank euch dreien!!!
hätte nie gedacht dass mir so schnell jmd hilft! :)

die version von format_c hab ich jetzt übernommen, kann ich schön mit weiterarbeiten!
danköööö!!!!
habt nem fachinformatiker-azubi den feierabend n stück näher gebracht!!! *freu*

danke und gruß
Markus
Crian
 2003-11-10 17:50
#70877 #70877
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
[quote=schnuffi,10.11.2003, 16:47]erst mal vielen vielen dank euch dreien!!!
hätte nie gedacht dass mir so schnell jmd hilft! :)
[/quote]

So sind wir hier in diesem Forum ;-)

[quote=Crian,10.11.2003, 16:40]eine Funktion anzubieten, dürfte für den Fragenden am bequemsten sein :-)
[/quote]
[quote=schnuffi,10.11.2003, 16:47]die version von format_c hab ich jetzt übernommen, kann ich schön mit weiterarbeiten!
danköööö!!!!
[/quote]
Öhm ... *wunder* ... anscheinend doch nicht ???\n\n

<!--EDIT|Crian|1068479508-->
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
<< >> 10 Einträge, 1 Seite



View all threads created 2003-11-10 17:12.