Jonas: Länge eines Arrays ermitteln?

Hallo

Also ich hab ein Array @array. Nun will ich ermitteln, wieviel einträge der Array hat. Das mach ich im moment so:

$i = 0;
foreach(@array) {$++;}

Klappt auch ohne Problem, aber es stellt sich mir die Frage, ob es dafür nicht auch eine eingebaute "Funktion" gibt!

Merci aus der Schweiz ;)

Jonas

  1. Klappt auch ohne Problem, aber es stellt sich mir die Frage, ob es dafür nicht auch eine eingebaute "Funktion" gibt!

    das geht ganz einfach mit $#array

    1. Klappt auch ohne Problem, aber es stellt sich mir die Frage, ob es dafür nicht auch eine eingebaute "Funktion" gibt!

      das geht ganz einfach mit $#array

      Danke!

      1. Hallo,
        wieso eigentlich $# ?
        Ich habe mit
        $anzahl_elemente = @array;
        nie Probleme gehabt.

        $xNeTworKx.

        --
        Mit Computern lösen wir Probleme, die wir ohne sie gar nicht hätten.
    2. Klappt auch ohne Problem, aber es stellt sich mir die Frage, ob es dafür nicht auch eine eingebaute "Funktion" gibt!

      das geht ganz einfach mit $#array

      Nicht ganz 100% richtig. Du kriegst damit wie schon gesagt, den Index des letzten Elementes. folglich wäre es richtiger:

      $#array - $[

      Die anzahl der Elemente bekommst du mit scalar @array
      siehe:

      $[ = 0;

      @test = qw/1 2 3 4 5 6 7 8 9 0/;

      print "länge: $#test\n";
      print "Anzahl der elemente: ". (scalar @test)."\n";

      $[ = 1;
      @test = qw/1 2 3 4 5 6 7 8 9 0/;

      print "länge: $#test\n";
      print "Anzahl der elemente: ". (scalar @test)."\n";

      Struppi.

      1. achso, danke für die aufklärung, aber worin besteht der unterschied zwischen der länge eines arrays und dem index des letzten elementes? wenn ich z.b. eine funktion auf jedes element eines arrays ausführen will und ich das ganze mit ner schleife mache, dass ists doch im prinzip egal, weil es ja keine "toten" elemente in einem array geben kann. beispielsweise:

        $liste[0] = 0;
        $liste[1] = 3;
        $liste[3] = 2;

        das element nummer 2 wäre also undefiniert. aber wo kann sowas vorkommen?

        danke,

        max

        1. achso, danke für die aufklärung, aber worin besteht der unterschied zwischen der länge eines arrays und dem index des letzten elementes? wenn ich z.b. eine funktion auf jedes element eines arrays ausführen will und ich das ganze mit ner schleife mache, dass ists doch im prinzip egal, weil es ja keine "toten" elemente in einem array geben kann. beispielsweise:

          Du kannst mit $[ den Startindex verändern und dann bekommst du mit $# einen anderen Wert als mit scalar, da ersteres den Index des letzten Elementes zurückgibt und Scalar die Anzahl der Elemente.

          $liste[0] = 0;
          $liste[1] = 3;
          $liste[3] = 2;

          das element nummer 2 wäre also undefiniert. aber wo kann sowas vorkommen?

          Ja, aber undefiniert ist auch ein Wert, soll heißen Perl füllt den Rest des Arrays immer mit undefinierten Werten auf.

          Struppi.

  2. Hallo.

    Klappt auch ohne Problem, aber es stellt sich mir die Frage, ob es dafür nicht auch eine eingebaute "Funktion" gibt!

    In skalarem Kontext liefert das Array seine Länge:
    $i = @array; oder
    $i = scalar(@array);

    $#array liefert den Index des letzten Elements der Liste.

    Gruß
    Norbert