Schrift
[thread]6512[/thread]

Bestimmtes Element im array löschen (Seite 2)

Leser: 13


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
snarf
 2004-08-19 13:22
#49395 #49395
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
[quote=Taulmarill,19.08.2004, 10:58]ohne in anspruchnahme auf vollständigkeit oder richtigkeit.

1. was macht $++? sollte das nicht eher $i++ heissen?
2. das if/else konstrukt müsste doch innerhalb der while schleife stehen, oder?
3. unter der annahme, dass ich mit punkt 1 recht habe, fängst du mit dem array element 1 an und nicht mit 0, da vor der if abfrage hochgezählt wird.
4. da beim splice alle elemente nach dem gelöschten "nachrücken", würde dein script bei jedem löschen das nächste element überspringen.[/quote]
Punkt 1: korrekt
Punkt 2: jein - müsste in der Schleife stehen, wenn ich alle matchenden elemente löschen wollte. ich habe mich hier mal auf das erste matchende beschränkt

Punkt 3+4: ergeben sich dann aus dem unterschiedlichen Verständnis der Situation. Wenn Du alle löschen wolltest hast Du natürlich recht!

@Crian & @Ronnie:

Natürlich ist grep fast immer das Mittel der Wahl :) allerdings hatte ich so die leise Intention, bei einer solchen Frage mal mit den wirklich rudimentären Basics (inkl. wie Suche ich irgendetwas in einem Array und bekomme auch noch die Position) zu antworten ...
Ronnie
 2004-08-19 13:38
#49396 #49396
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@snarf: Wenn man schon Perl einsetzen will oder muss(?) dann sollte man auch die Vorteile nutzen die einem diese Sprache bietet - grep und map sind Riesenvorteile!
snarf
 2004-08-19 13:54
#49397 #49397
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
[quote=Ronnie,19.08.2004, 11:38]@snarf: Wenn man schon Perl einsetzen will oder muss(?) dann sollte man auch die Vorteile nutzen die einem diese Sprache bietet - grep und map sind Riesenvorteile![/quote]
Um Missverständnissen vorzubeugen - ich gebe Dir da vollkommen recht!!!

Nur wenn ich mir (z.B. in einem anderen Thread) ansehen muss wie wirklicher non-beginner Code geschrieben wird, es aber an ganz rudimentären Fähigkeiten und Verständnissen mangelt, dann glaube ich doch, dass man zuweilen auch ein paar Stufen zurückgehen kann und sollte.

Und gerade eine Frage wie diese (Array-Funktionen sind ja nun wirklich ein rudimentärer Teil von Perl - at least in my eyes) bietet sich ja für einen Mischmasch aus Problemlösung und Beginnerhilfe an, oder?

Nichts gegen die beliebte Aussage "There's more than one way ...", aber manchmal trägt die schnelle und perlische Lösung nicht unbedingt zum Verständnis bei ...

Okay - keinen Glaubenskrieg hier an dieser Stelle heraufbeschwören ... dazu ist es hier viel zu nett :)))

Dirk
kerstin
 2004-08-19 14:08
#49398 #49398
User since
2004-08-19
5 Artikel
BenutzerIn
[default_avatar]
Hallo, das Problem habe ich mit dem grep gelöst. vielen Dank für Eure Hilfe.
Taulmarill
 2004-08-19 15:57
#49399 #49399
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
snarf: du hast nicht ganz unrecht. aber auf der anderen seite sollte man immer auch eine "perlishe" lösung präsentieren. das kann dann u.U. dazu motivieren sich mal mit funktionen wie map oder grep zu befassen, was man sonst nicht getan hätte.
ausserdem kann ein user, der eine antwort nicht versteht, immer noch nachfragen, ich hab's hier im forum noch nicht erlebt, dass solche "anfängerfragen" nicht beantwortet oder blöd kommentiert wurden.
ich versuche halt immer, wenn ich eine antwort schreibe, eine möglichst elegante lösung zu präsentieren. wenn dann jemand was nicht versteht, erklär ich's ihm gerne.

zu meinen beanstandungen deines codes: da war's doch nur der typo. ich hatte mich wohl zu sehr auf das löschen aller elemente versteift, was ich in die anfrage hineininterpretiert hatte.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2004-08-19 16:54
#49400 #49400
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Wie ich schon weiter oben sagte: I.A. finde ich grep hiuer netter, aber es kann Gründe für die andere Lösung geben (riesiges Array) und außerdem ist es nicht schlecht, dass Snarf aus den genannten Gründen den "Weg zu Fuß" aufgezeigt hat.

@Taulmarill : wenn man nur das erste oder letzte auftauchende Element löschen will, kommt man wohl um splice nicht herum.

Ich hatte die Frage so verstanden, dass ein eindeutiges Element gelöscht werden soll, deshalb hatte ich zuerst die Möglichkeit mehrfacher Elemente gar nicht bedacht.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Relais
 2004-08-19 17:01
#49401 #49401
User since
2003-08-06
2261 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Crian,19.08.2004, 14:54]@Taulmarill : wenn man nur das erste oder letzte auftauchende Element löschen will, kommt man wohl um splice nicht herum.[/quote]
oh, shift und pop schon vergessen? =)
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop 12. bis 14. Mai 2025 in München.

Winter is Coming
Crian
 2004-08-19 17:09
#49402 #49402
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Hast Du die Frage gelesen? Man weiß nicht, an welcher Position das gute Stück ist. Man kann natürlich so lange poppen und das was dabei herauskommt auffangen und später wieder hineinpushen, bis das gesuchte herauskommt, aber das willst Du nicht wirklich, oder?

Edit: :blush: Vielleicht hätte ich das lieber mit shift / unshift formulieren sollen, aber unshift ist langsam, wie man weiß ;)\n\n

<!--EDIT|Crian|1092921014-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Taulmarill
 2004-08-19 17:12
#49403 #49403
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
@Crain: wie schon gesagt, habe ich einiges in die frage hineininterpretiert. die lösung mit grep scheint ja auch am besten angekommen zu sein.

@Relais: es geht hier nicht um das erste oder letzte element des arrays, sondern das erste oder letzte element welches eine bestimmte bedingung erfüllt
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Taulmarill
 2004-08-19 17:15
#49404 #49404
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
[quote=Crian,19.08.2004, 15:09]Man kann natürlich so lange poppen und das was dabei herauskommt auffangen und später wieder hineinpushen, bis das gesuchte herauskommt.[/quote]
:D jaja, schon klar, geht hier alles nur um perl. ;)
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2004-08-19 11:31.