2 Stimmen

Wie kann man den APL-Kompressionsoperator am besten in Perl implementieren?

Manchmal bringt mich meine APL-Vertrautheit auf algorithmische Ideen zur Problemlösung, die ich dann in einer anderen Sprache - zum Beispiel Perl - neu implementiere.

Ich habe also eine Textdatei verarbeitet, um einen booleschen Vektor zu erstellen, der die verwendeten Felder in einer abgegrenzten Datei angibt, und möchte nun die Indizes dieser verwendeten Felder und die Namen der verwendeten Felder ausgeben. In APL würde ich den Komprimierungsoperator über den Vektor der Feldnamen und über das Jota der Anzahl der Felder verwenden.

In Perl habe ich dies getan:

my @UsedFieldNames = map { $UsedFields[$_] ? $FieldNames[$_] : () } 0 .. $#UsedFields;

y

say join " ", map { $UsedFields[$_] ? $) : () } 0 .. $#UsedFields;

donde @UsedFields ist ein Array, das 0 für unbenutzte und 1 für benutzte Felder enthält.

  1. Ich mag es nicht wirklich, die Karte mit ?:() um eine Komprimierung zu simulieren - gibt es einen besseren Weg (mein echtes Programm macht es ein drittes Mal, wenn es eine vertikale oder Verkleinerung über die Datei simuliert)?

  2. Ich mag es nicht wirklich, die Karte über die Indizes zu tun, um die Ergebnisse zu erhalten - gibt es einen besseren Weg, das zu berechnen? (Ich schätze, eine Optimierung wäre, zuerst die verwendeten Indizes zu berechnen, dann

    @UsedFieldNames = @FieldNames[@UsedIndexes];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X