Jonas: Array - elemente löschen - weniger als 3 Zeichen, ohne Zahlen!

Hallo

Ich habe ein kleines Porblem:
Ich habe einen Array. Nun will ich alle Elemente löschen, die weniger als 3 Zeichen haben, falls dies buchstaben sind. Wenn es aber zahlen sind, sollen die elemente belassen werden.

Wennn ich alle Elemente löschen will, die kleiner als 3 Zeichen haben, so kann ich das laut einem Tipp so machen:

my @new_ary = grep { length($_) > 3 } @old_ary;

Was ist nun aber, wenn ich die Zahlen stehen lassen will? Wo/wie kann ich diese Bedingung zusätzlich einfügen?

Gruss und Dank

Jonas

  1. Hallo Jonas,

    Ich habe einen Array. Nun will ich alle Elemente löschen, die weniger als 3 Zeichen haben, falls dies buchstaben sind.

    Und warum bleibst du nicht in deinem 1. Thread (->[pref:t=74630&m=429897])?

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Jonas,
      Und warum bleibst du nicht in deinem 1. Thread (->[pref:t=74630&m=429897])?

      Grüße aus Nürnberg
      Tobias

      Sorry, ich hab mein altes Thema nicht wieder gefunden (Trotz ctrl-f und suche nach meinem namen)

      Mein Fehler!
      Eine Antwort ( in welchem Thema auch immer ) wäre trotzdem cool ;)

      Gruss

      jonas

  2. use Mosche;

    Ich habe einen Array. Nun will ich alle Elemente löschen, die weniger als 3 Zeichen haben, falls dies buchstaben sind. Wenn es aber zahlen sind, sollen die elemente belassen werden.

    Wennn ich alle Elemente löschen will, die kleiner als 3 Zeichen haben, so kann ich das laut einem Tipp so machen:
    my @new_ary = grep { length($_) > 3 } @old_ary;
    Was ist nun aber, wenn ich die Zahlen stehen lassen will? Wo/wie kann ich diese Bedingung zusätzlich einfügen?

    Schon mal bei 'perldoc -f grep' nachgeschaut? Nein? Dann tu das jetzt.

    Damit du mal selbst darauf kommen kannst, solltest du in der Langform anfangen:

    my @old_array ( 1 .. 4, "sdf", "rdsfg");
    my @new_array;
    foreach (@old_array) {
       if ((/\w/ && length($_) > 3) or /^\d+$/) {
         push @new_array, $_;
       }
    }

    Zu deiner Frage:
    Die Bedingung, ob ein Element aus dem alten Array in das neue übernommen werden soll, steht in den geschweiften Klammern nach grep.

    use Tschoe qw(Matti);

    --
    neues Selftreffen?
    http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    1. Hallo Matti,

      if ((/\w/ && length($_) > 3) or /^\d+$/) {

      if(length($_) > 3 || /^\d+$/) reicht völlig :-)

      Grüße,
       CK

      --
      "Ich muss auflegen, mein Essen ist gleich fertig."
      "Oh, was gibt 's denn?"
      "Hmm. Die Packung liegt schon im Muell, keine Ahnung.
      1. Danke euch allen!

        Gruss

        Jonas

      2. use Mosche;

        if ((/\w/ && length($_) > 3) or /^\d+$/) {

        if(length($_) > 3 || /^\d+$/) reicht völlig :-)

        Es ging ja auch darum, dass Prinzip klarzumachen.
        Anzumerken (und als HA dem Fragesteller zu überlassen) ist noch, dass /^\d+$/ zur Erkennung von beliebigen Zahlen ungeignet ist, es dient höchstens zur Erkennung von Int-Werten, wobei ich in einem solchen Fall gilt:

        /^\d+$/   <=>   ($_ eq '0' || int($_) != 0)

        und letzteres wohl wesentlich schneller sein sollte.

        use Tschoe qw(Matti);

        --
        neues Selftreffen?
        http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.