/ / Arbeiten mit Listen in Perl - Perl

Arbeiten mit Listen in Perl - Perl

Ich habe zwei Listen a und b wie folgt:

a = ("church.n.01","church.n.02","church_service.n.01","church.n.04")
b = ("temple.n.01","temple.n.02","temple.n.03","synagogue.n.01")

Ich möchte Beziehungen zwischen Mitgliedern eines findenund b unter Verwendung der Funktion get_relatedness (arg1, arg2). Wie kann ich in Perl auf a und b operieren, so dass ich alle möglichen Kombinationen zwischen a und b über zwei verschachtelte for-Schleifen in Perl überlasse.

Bitte helfen Sie mir, dies zu lösen, da ich neu bei Perl bin.

Antworten:

1 für die Antwort № 1
my @a = ("church.n.01","church.n.02","church_service.n.01","church.n.04");
my @b = ("temple.n.01","temple.n.02","temple.n.03","synagogue.n.01");

use Data::Dumper;
print Dumper [ get_relatedness(@a, @b) ];

sub get_relatedness {
my ($c, $d) = @_;

return map { my $t=$_; map [$t, $_], @$d } @$c;
}

Ausgabe

$VAR1 = [
[
"church.n.01",
"temple.n.01"
],
[
"church.n.01",
"temple.n.02"
],
[
"church.n.01",
"temple.n.03"
],
[
"church.n.01",
"synagogue.n.01"
],
[
"church.n.02",
"temple.n.01"
],
[
"church.n.02",
"temple.n.02"
],
[
"church.n.02",
"temple.n.03"
],
[
"church.n.02",
"synagogue.n.01"
],
[
"church_service.n.01",
"temple.n.01"
],
[
"church_service.n.01",
"temple.n.02"
],
[
"church_service.n.01",
"temple.n.03"
],
[
"church_service.n.01",
"synagogue.n.01"
],
[
"church.n.04",
"temple.n.01"
],
[
"church.n.04",
"temple.n.02"
],
[
"church.n.04",
"temple.n.03"
],
[
"church.n.04",
"synagogue.n.01"
]
];

1 für die Antwort № 2

Um alle Kombinationen von Elementen in derzwei Arrays, die zwei verschachtelte Schleifen verwenden, müssen Sie nur eine durchlaufen und für jedes Element des ersten Arrays eine innere Schleife über die Elemente des zweiten Arrays ausführen:

my @a = ("church.n.01","church.n.02","church_service.n.01","church.n.04");
my @b = ("temple.n.01","temple.n.02","temple.n.03","synagogue.n.01");

my $relatedness;

for my $outer (@a) {
for my $inner (@b) {
$relatedness += get_relatedness($outer, $inner);
}
}