Schrift
[thread]6247[/thread]

arrayelement einfügen: ein element in ein array einfügen (Seite 2)



<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
Crian
 2004-05-12 11:28
#82227 #82227
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=pq,11.05.2004, 17:23][quote=Crian,11.05.2004, 14:03]Oder das Element per splice ein- und ausfädeln.[/quote]
obacht, splice ist auch teuer. falls es mehrere elemente mit \n gibt, muss
jedesmal ein splice gemacht werden.[/quote]
Ja klar, aber ich teste ja extra auf das vorkommen von \n ab, so dass es nur für jedes Element, wo es nötig ist, aufgerufen wird.

Der Vorteil ist der Speicherplatz, nicht die Geschwindigkeit.


@Dieter: Rückwärts finde ich schöner als vorwärts, dann muss man sich keine Gedanken darum machen, dass sich das Array ja verlängert.
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
ptk
 2004-05-12 13:09
#82228 #82228
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Crian,12.May.2004, 09:28]Der Vorteil ist der Speicherplatz, nicht die Geschwindigkeit.[/quote]
Wenn man Pech hat, muss auch bei splice umkopiert werden, wenn das Array dadurch groesser wird und intern kein Platz fuer eine Vergroesserung vorhanden ist.
Gast Gast
 2004-05-12 18:17
#82229 #82229
[quote=ptk,12.05.2004, 11:09]Wenn man Pech hat, muss auch bei splice umkopiert werden, wenn das Array dadurch groesser wird und intern kein Platz fuer eine Vergroesserung vorhanden ist.[/quote]
Wenn intern der Platz für eine vergrößertes Array ausgegangen ist, dann ist sicherlich auch kein Platz mehr zum Umkopieren vorhanden ;)
Crian
 2004-05-12 18:20
#82230 #82230
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Nein, es kann ja sein, dass sich der Speicherplatz nur an dieser Stelle nicht mehr vergrößern lässt. Aber in diesem Fall muss mit jeder Methode umkopiert werden, ist also egal.
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
Gast Gast
 2004-05-12 18:25
#82231 #82231
[quote=Crian,12.05.2004, 16:20]Nein, es kann ja sein, dass sich der Speicherplatz nur an dieser Stelle nicht mehr vergrößern lässt.[/quote]
Unter C/C++ schon - aber nicht unter Perl ...
Crian
 2004-05-12 18:34
#82232 #82232
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
?
Erzähl mehr :)
Lässt sich der Speicherbedarf für ein Array in Perl über mehrere Speicherbereiche verteilen? Wie wird das dann intern gehandelt? In einer Hash-ähnlichen Tabelle, wo man zu jedem belegten Arrayelement die Adresse findet und dann dort nachschaut? Oder wie geht das?
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
ptk
 2004-05-12 18:39
#82233 #82233
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nein, ein Perl-Array ist ein echtes Array. Man muss schon Platz fuer alle SV*s hintereinander haben. Aber wenn ein SV* einen String enthaelt, ist dieser im Allgemeinen an einer anderen Stelle im Speicher abgelegt.
Gast Gast
 2004-05-12 18:54
#82234 #82234
Perl 'swapt' einfach ... (anders könnte z.B. 'grep' bei der Anwendung auf große Datenbestände auch nicht funktionieren).
Einer der hervorstechenden Vorteile von Perl ist eben die dynamische Speicherverwaltung - ein Array oder ein Hash kann (im Rahmen der physikalischen Speicherkapazität der verwendeten Maschine), ohne Einschränkungen ausgedehnt werden.
Unter C/C++ etc. gibt der Programmierer die max. Größe des zu verwenden Speicherplatzes vor (legt sich damit sehr häufig auf den Bauch oder verschwendet ganz schlicht den Speicherplatz um sich nicht auf den Bauch zu legen), Perl dagegen 'ist intelligent' und vergrößert den Speicherplatz bei Bedarf.
Perl kann den verwendeten Speicherplatz auch verringern wenn Array/Hash kleiner werden, oder z.B. ein undef() erfolgt; allerdings hängt es dann von der Art des Betriebssystems ob die Freigabe des Speichers dort dann auch tatsächlich umgesetzt wird.
Gast Gast
 2004-05-12 19:01
#82235 #82235
[quote=ptk,12.05.2004, 16:39]Nein, ein Perl-Array ist ein echtes Array. Man muss schon Platz fuer alle SV*s hintereinander haben. Aber wenn ein SV* einen String enthaelt, ist dieser im Allgemeinen an einer anderen Stelle im Speicher abgelegt.[/quote]
Nur eindimensionale Arrays sind unter Perl ein 'echtes' Array (aber auch das stimmt nicht 'so ganz' weil Perl auch eindimensionale Arrays -intern- als Hash behandelt).
Mehrdimensionale Arrays existieren unter Perl lediglich 'virtuell'

edit: Rechtschreibfehler behoben :)\n\n

<!--EDIT|Dieter|1084381895-->
Crian
 2004-05-12 19:06
#82236 #82236
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Dieter,12.05.2004, 17:01]aber auch das stimmt nicht 'so ganz' weil Perl auch eindimensionale Arrays -intern- als Hash behandelt.[/quote]
Ja ok, so hatte ich mir das jetzt ungefähr auch vorgestellt.

Und für C++ gibt es ja vector aus der STL :-)
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
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2004-05-11 11:49.