Arrays nachträglich vergrößern
Übersicht

![]() |
DamienXBetreff: Arrays nachträglich vergrößern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich weiß zwar eigentlich dass es normalerweise nicth möglich ist aber kann ich Arrays nachträglich vergrößern? Ich hab z.B. ein Array (map[map_x,map_y] wobei map_x und .._y jeweils 99 Felder haben!) und ich verkleiner das Array beim Laden einer Map da ich ja nur die Tiles gezeichnet haben will die gespeichert werden... Das Problem... wenn ich dann wieder eine Map laden möchte die größer als die vorhergehende ist dann ist das Array wiederum zu klein! Gibt es außer es mit Types zu machen eine Lösung? Mfg DamienX |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Strict
Global meinarray:Byte[] meinarray = New Byte[100,100] 'Jetzt hat es 100*100 Felder meinarray = New Byte[200,200] 'Jetzt hats 200*200 Felder Ob der Inhalt der alten Felder dabei erhalten bleibt, weiß ich nicht. Mfg, BORNtobeNAMELESS |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
...und noch eine Variante ![]() Code: [AUSKLAPPEN] blablub[1] 'Array anlegen
blablub = blablub[..256] 'Array vegrößern damit kannst du ein Array der Größe 1 auf 256 vergrößern... Hab aber noch nicht probiert, ob das auch mit mehrdimensionalen Arrays funktioniert greetz |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
oh, das wuste ich noch garnicht.
Aber: BMax-Help hat Folgendes geschrieben: Local a[200] 'initialize a[] to 200 elements
a=a[50..150] 'extract middle 100 elements of a[] a=a[..50] 'extract first 50 elements of a[] <------- DAS a=a[25..] 'extract elements starting from index 25 of a[] a=a[..] 'copy all elements of a[] a=a[..200] 'resize a[] to 200 elements <------ UND DAS Wo ist da bitte sehr der unterschied? Und hat das Teil nicht schon 200 Felder? |
||
![]() |
DamienX |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow danke Jungs... das hilft mir ungemein!
Jetzt habe ich das größte Problem beseitigt... EDIT: Aber wenn ich die Arrays jetzt fast schon wie Types behandeln kann welche Existenzberechtigung habe dann noch diese? @BtbN: Vieleicht besteht der Unterschied einfach dass das eine "resized" wird und das andere schon angelegt ist! Mfg DamienX |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
BORNtobeNAMELESS hat Folgendes geschrieben: oh, das wuste ich noch garnicht.
Aber: BMax-Help hat Folgendes geschrieben: Local a[200] 'initialize a[] to 200 elements
a=a[50..150] 'extract middle 100 elements of a[] a=a[..50] 'extract first 50 elements of a[] <------- DAS a=a[25..] 'extract elements starting from index 25 of a[] a=a[..] 'copy all elements of a[] a=a[..200] 'resize a[] to 200 elements <------ UND DAS Wo ist da bitte sehr der unterschied? Und hat das Teil nicht schon 200 Felder? Code: [AUSKLAPPEN] a=a[50..150] 'a hat danach nur noch 100 Felder
a = a[..50] 'von diesen 100 werden die ersten 50 genommen (a hat nun 50 Felder) a=a[25..] 'von diesen 50 werden die 25 ab index 25 genommen (a hat 25 Felder) a=a[..] 'kopie von a (immer noch 25 Felder) a=a[..200] 'nun wirds wieder auf 200 Felder erweitert Zitat: EDIT: Aber wenn ich die Arrays jetzt fast schon wie Types behandeln kann welche Existenzberechtigung habe dann noch diese?
Ich finde, da ist ein ziemlich grosser Unterschied zwischen Types und Arrays ![]() |
||
- Zuletzt bearbeitet von Jolinah am Do, Dez 22, 2005 12:22, insgesamt einmal bearbeitet
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] a=a[50..150] 'a hat danach nur noch 100 Felder
[/quote]
a = a[..50] 'von diesen 100 werden die ersten 50 genommen (a hat nun 50 Felder) a=a[25..] 'von diesen 50 werden die 25 ab index 25 genommen (a hat 25 Felder) a=a[..] 'kopie von a (immer noch 25 Felder) a=a[..200] 'nun wirds wieder auf 200 Felder erweitert Das funktioniert leider nicht mit mehrdimensionalen Arrays. ![]() |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann man nicht einfach schreiben:
a=a[..200,..200] ? |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Werden die einträge beim vergrößern gelöscht?
Nein, die Ursprungswerte bleiben erhalten. Aufgefüllt wird selbsverständlich mit 0. Wenn ich schreibe: a=a[..250] wird a natürlich die neue größe zugewiesen und die werte von 0 - 250 gepickt und an a übergeben. Machst du nun sowas hier: Code: [AUSKLAPPEN] local a[200]
a=a[..100] Pickst du alle Werte von 0 - 99 heraus und speicherst sie wieder in A, dadurch werden meiner Meinung die anderen Bereiche nicht mehr referenziert und vom Garbage Collector vernichtet. Deshalb funzt dieses Beispiel nicht: Code: [AUSKLAPPEN] Local a[200]
a=a[..100] For steps=0 To 199 a[steps]=1 Next Wenn du aber das a[..100] in einer anderen Variable speichern würdest. Code: [AUSKLAPPEN] Local a[200]
Local p[] 'A Füllen For steps=0 To 199 a[steps]=steps Next p=a[10..110] p=p[..200] For steps=0 To 199 Print p[steps] Next Hast du zuerst den Array ohne größe. Dann liest du 100 Werte aus speicherst sie in p. p ist in diesem Fall ~100 Werte groß. Wenn es dann wieder auf 200 skalierst, bleiben die alten werte erhalten. IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie schon gesagt, kann man mehr dimensionale Arrays nicht vergrößern. Man kann sich aber helfen, indem man folgendes macht :
(Nennt sich Arrays in Arrays) Code: [AUSKLAPPEN] Local Test:Int[][] Test = Test[..200] For Local I = 0 To 199 Test[I] = Test[I][..200] Next For Local x = 0 To 199 For Local y = 0 To 199 Test[x][y] = Rand(0,200) Next Next 'Resizing Test = Test[..20] For I = 0 To 19 Test[I] = Test[I][..20] Next For X = 0 To 19 For Y = 0 To 19 Print "Array : " + x + " : " + y + " = " +Test[x][y] Next Next Näheres unter http://www.blitzwiki.org/index..._of_Arrays |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
cool, danke | ||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
DamienX |
![]() Antworten mit Zitat ![]() |
---|---|---|
So einfach wie genial! Merci!
Mfg DamienX |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group