Thread X zwischen laufzeitabhängig viele Arrays (2 answers)
Opened by Sven_123 at 2011-07-05 14:23

Sven_123
 2011-07-05 14:24
#150151 #150151
User since
2010-06-01
120 articles
BenutzerIn
[default_avatar]
Kurz: Ist es möglich, sämtliche 1D-Arrays, die in einem 2D-Array stehen durch ein X zu kombinieren? Sowas wie
Code (perl): (dl )
1
2
my @x = [1,2],[3,4],5;
[X]@x; #-> (1,3,5),(2,3,5),(1,4,5),(2,4,5)
was nicht geht, weil [] ja immer eine Reduktion zu einem skalaren Wert darstellt (oder?).

Lang: Ich hab einen 2D-Array, bei dem jeder 1D-Array verschiedene Möglichkeiten für die Stelle in der er im Gesamtarray steht repräsentiert. (Z.B. auf Platz 0 liegt ein Apfel, auf Platz 1 ein Apfel, oder eine Pflaume,... -> ['Apfel'],['Apfel','Pflaume'],...)
Jetzt will ich in einer Funktion die "beste" Kombination von Obst rausfinden, d.h. sämtliche Kombinationen erstellen und vergleichen. Mein gedachtes Script sähe so aus:
Code (perl): (dl )
1
2
3
4
5
6
my @x = [1,2],[0,1,2],3,[2,3];
my $alte_bewertung = 0;
for [X]@x -> @kombination {
 my $aktuell = funktion(@kombination);
 if $aktuell > $alte_bewertung {@x = @kombination; $alte_bewertung = $aktuell}
}

Zum einen stimmt das [X] nicht. Ich weiß nicht, ob es überhaupt möglich ist, das so zusammenzufassen, vorerst werd ich es mal umgehen. Zum anderen weiß ich nicht genau, ob ich das @x in der for-Schleife ändern dürfte, ohne, dass es sich auf die Schleife auswirkt - ich denke, aber schon, über welche Elemente iteriert wird, wird bestimmt nur einmal, am Anfang festgelegt.
Wär ziemlich hübsch, das so kurz schreiben zu können. :)

Nebenbei - warum ist man in perl6 von der Unterscheidung von Arrays und Skalaren durch @ und $ abgerückt? In perl5 war einem (mir) dadurch oft viel bewusster, was eigentlich grad passiert. In perl6 ist das manchmal etwas schwammig - generell scheint es oft ganz egal, ob man ein $, oder ein @ nimmt, wenn die gespeicherte Referenz eh fast immer (gefühlsmäßig) automatisch als Array benutzt wird.

View full thread X zwischen laufzeitabhängig viele Arrays