![]() |
Multidimensionale Arrays unter .NET initialisieren
Hi,
durch Zufall bin ich in Delphi 8 auf ein interessantes Konstrukt gestoßen, wie man Arrays schnell initialisieren kann.
Delphi-Quellcode:
Dieses Feature ist nicht in der Delphi-Hilfe dokumentiert, wird allerdings in den Delphi-Source-Codes genutzt, scheint wohl okay zu sein, dass dann auch zu nutzen :stupid:
procedure TWinForm.Button1_Click(sender: System.Object; e:
System.EventArgs); type TSimpleArray = Array of Byte; TMulitDimArray = Array of Array of Byte; var SimpleArray: TSimpleArray; MulitDimArray: TMulitDimArray; begin // reserviert 0..255 Bytes SimpleArray := New(TSimpleArray, 256); // reserver [0..19, 0..49] Bytes MulitDimArray := New(TMulitDimArray, 20, 50); ... end; ...:cat:... |
Re: Multidimensionale Arrays unter .NET initialisieren
Macht SetLength nicht dasselbe? :gruebel: Oder gibt es das unter WinForms nicht mehr? (Habe D8 gerade nicht drauf.)
|
Re: Multidimensionale Arrays unter .NET initialisieren
Zitat:
...:cat:... |
Re: Multidimensionale Arrays unter .NET initialisieren
Zitat:
...:cat:... |
Re: Multidimensionale Arrays unter .NET initialisieren
Zitat:
Warum also nicht gleich so, damit hat man wesentlich mehr Kontrolle über den Array (zum Bleistift kann man auch die LowerBounds definieren. ;)
Code:
byte[,] Miep;
Miep = Array.CreateInstance(typeof(byte) // Längen , new int[2] { 15, 44 } // Startpunkte , new int[2] { 20, 40 } ) as byte[,]; for (int i = 0; i < Miep.Rank; i++) { Console.WriteLine("Dimension {0} geht von {1} bis {2}" , i + 1 , Miep.GetLowerBound(i) , Miep.GetUpperBound(i)); } Console.WriteLine("Bitte zum Beenden den Any-Key suchen... :P"); Console.ReadLine();
Code:
Eine Instanz eines Arrays in der CLR hat IMHO eine statische Länge (wenn Herr Hejlsberg das sagt glaube ich das auch ;) ).
Dimension 1 geht von 20 bis 34
Dimension 2 geht von 40 bis 83 Bitte zum Beenden den Any-Key suchen... :P Da deshalb sowieso immer eine neue Instanz erzeugt werden muss, kann ich mir nichts vorstellen warum setLength langsamer sein sollte. (Würde mich aber brennend interessieren :firejump: ) |
Re: Multidimensionale Arrays unter .NET initialisieren
Zitat:
Diese Information habe ich aus einer Email von Rudy Velthuis (aus dem TeamB) ...:cat:... |
Re: Multidimensionale Arrays unter .NET initialisieren
Zitat:
Das da sollte doch auch eine sofortige Initialisierung bewirken:
Delphi-Quellcode:
Ich weiß jetzt aber nicht, ob es mit mehrdimensionalen oder jagged Arrays in D8 klappt. (bin halt kein wirklicher .Net-Delphianer :oops: )
type HilfsTyp = array of byte;
var Miep :HilfsTyp; begin Miep := HilfsTyp.Create(1, 2, 3, 4, 08, 15); end; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz