Wie kann die Größe eines 1-D-Arrays zu einem 2-D-Array in C # geändert werden, ohne zu kopieren?

8

Soweit ich weiß, ist ein 2-D-Array genau wie ein 1-D-Array im Speicher angelegt, es verwendet lediglich eine andere Indizierung. Daher scheint es, dass es in C # einen Weg geben muss (wahrscheinlich unsicher), ein 1-D-Array in ein 2-D-Array zu konvertieren, ohne Elemente tatsächlich zu kopieren, vorausgesetzt, dass die Elemente aus dem 1-D-Array übersetzt werden sollen die 2-D-Anordnung in einer Reihe-zuerst-Weise. Ich habe herausgefunden, wie man das mit einem einzigen Kopierbefehl bewerkstelligen kann, aber es scheint immer noch mehr Verarbeitung als nötig zu sein:

%Vor%

Gibt es eine Möglichkeit, dass ich C # sagen kann? Behandle dieses 1-D-Array stattdessen als 2D-Array mit diesen Dimensionen? Unsicherer Code ist in Ordnung. Wenn nicht, ist dies eine Einschränkung der Sprache oder gibt es ein grundlegendes Problem, das ich vermisse?

    
Craig W 27.10.2017, 18:07
quelle

3 Antworten

2

Eine Möglichkeit wäre, eine Klasse zu definieren, die auf das zugrunde liegende 1D-Array zugreift.

%Vor%

Meine Indexierung könnte rückwärts sein, jedoch würde sich dies wie ein 2D-Array verhalten, während die 1D-Array-Referenz beibehalten wird.

edit: Indizierung war rückwärts, behoben.

    
Aaron Roberts 27.10.2017 18:40
quelle
0

Sie könnten versuchen, Buffer.BlockCopy Methode stattdessen:

%Vor%

Es akzeptiert auch mehrdimensionale Arrays.

    
Dmitry 27.10.2017 18:22
quelle
-1

Verwenden Sie Marshal.PtrToStructure .

Ich konnte nicht herausfinden, wie es geht, ohne das 2d-Array in die Struktur einzufügen, aber das Folgende funktioniert ohne eine Kopie.

%Vor%     
Moop 27.10.2017 18:37
quelle

Tags und Links