Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Perl-Frage: Loop über Array, multi-dimensionales

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • makki
    antwortet
    Ist ne Philosophie-Frage, ich mag code lieber, den ich selber 1J später auch noch verstehe
    ohne "use irgendwas::hastenichgesehen"
    Aber es gibt viele Wege nach Rom..

    Makki

    Einen Kommentar schreiben:


  • mivola
    antwortet
    Zitat von XueSheng Beitrag anzeigen
    Warum "@$input"? Input als Array wäre doch nur "@input".
    Naja, so ganz genau kann ich es auch nicht erklären. Ich nutze dieses Konstrukt in Frys Logikprozessor. Und dort ist $input ein Skalar (oder eine Referenz/Zeiger auf das Array?). Um dann wieder an das Array zu kommen muss man "Dereferencing" betreiben: Dereferencing in perl

    Das mit der Log-Ausgabe ist klar. Das mache ich aber nur während ich an einem Plugin schraube. Wenn es funktioniert, wird das wieder eingestampft...

    VG
    Micha

    Einen Kommentar schreiben:


  • XueSheng
    antwortet
    Zitat von mivola Beitrag anzeigen
    Code:
    use List::Util qw(sum);
    $sum = sum ( @$input )
    Das ist schön kompakt und funktioniert sehr gut :-)
    Warum "@$input"? Input als Array wäre doch nur "@input".
    Ansonsten verwende ich sum(@array) auch ganz gerne in meinen Plugins. i.d.R. aber nicht als Einzeiler, da somit noch eine debug Ausgabe folgen kann. So oder so ähnlich:
    Code:
    (sum(@array) > 0) ? ($retval = 1) : ($retval = 0);
    plugin_log($plugname, "[function ABC] retval: $retval") if ($debug >= 2);
    return $retval;

    Einen Kommentar schreiben:


  • mivola
    antwortet
    Danke makki,

    so in der Art passt das schon. Ich hatte nur gehofft dass es das auch als Einzeiler gibt. Und basierend auf deinem Vorschlag hab ich noch weiter gesucht und etwas gefunden: summe aller arrayelemente (Allgemeines zu Perl) - Perl-Community.de
    Code:
    use List::Util qw(sum);
    $sum = sum ( @$input )
    Das ist schön kompakt und funktioniert sehr gut :-)

    Danke,
    Micha
    PS@Mods: den Titel des Threads habe ich irgendwie versemmelt: alles ab dem Komma könnte eigentlich gelöscht werden

    Einen Kommentar schreiben:


  • makki
    antwortet
    Nun, wenn ich die Frage richtig verstehe ist eine for-Schleife übers Array dein bester Freund:
    Code:
    # oder
    my $result = 0 ;
    foreach my $invalue (@input) {
      if ($invalue > 0) {$result = 1;} 
    ..
    }
    (oder so ähnlich)

    Makki

    Einen Kommentar schreiben:


  • - √ - Perl-Frage: Loop über Array, multi-dimensionales

    Hallo an die Perl-Experten,

    evtl kann mir ja jemand von weiterhelfen. Ich suche eine generische/elegante Art+Weise wie ich über ein Array beliebiger Länge iterieren und die Werte oder-Verknüpfen (bzw. addieren) kann. Beispiel: $input zeigt auf ein Array und jedes Element enthält einen der Werte "0" oder "1". Bisher nutze ich ein solches Konstrukt mit bei einer bekannten Anzahl von Elementen im Array:
    Code:
    return ($input->[0] || $input->[1] || $input->[2] || $input->[3] || $input->[4]); // returns 0 or 1
    Ich würde dies gern durch etwas wie dies erstzen:
    return (sum($input) > 0 ? 1 : 0);
    Geht das? Oder muss ich tatsächlich eine for-schleife bauen und selbst summieren bzw "ver-oder-n"?

    Danke!
    Micha
Lädt...
X