Ich habe eine Klasse, die ein 2D-Array von i32-Werten aufnimmt. Hier ist mein Code:
export class Kernel {
public size: i32;
public margin: i32;
public multipliers: Array<Array<i32>>;
public products: Array<Array<i32>>;
constructor(multipliers: Array<Array<i32>>) {
...
}
public getAverage(): i32 {
...
}
public iterate(grid: Array<Array<i32>>): Array<Array<i32>> {
...
}
}
So versuche ich es zu instanziieren:
const kernelMultipliers = [
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]
];
let ptr = module.__retain(module.__allocArray(module.INT32ARRAY, kernelMultipliers));
let kernel = new module.exports.Kernel(ptr);
Gibt es eine Möglichkeit, ein 2D-Array von Werten zuzuweisen? Wenn nicht, gibt es eine elegante Möglichkeit, jedes 1d-Array zuzuweisen und ein Array von Array<i32>
Zeigern an den Klassenkonstruktor zu übergeben?
Bearbeiten: Ich denke, ich könnte das 2D-Array abflachen und dann die Breite übergeben, aber ich hoffe, dass es eine bessere Lösung gibt.
Versuchen Sie, zuerst die inneren Arrays von Ganzzahlen zuzuweisen und dann das äußere Array von Arrays von Ganzzahlen zuzuweisen, beispielsweise mit diesen IDs:
export const INNER_ID = idof<i32[]>();
export const OUTER_ID = idof<i32[][]>();
let ptr = module.__retain(
module.__allocArray(module.OUTER_ID,
kernelMultipliers.map(row => module.__allocArray(module.INNER_ID, row))
)
);
let kernel = new module.Kernel(ptr);
module.__release(ptr); // unless you still need it externally
Aber wenn Sie echte Leistung benötigen, ist es immer viel besser, 2D-Arrays zu reduzieren
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
Hilfreichster Kommentar
Aber wenn Sie echte Leistung benötigen, ist es immer viel besser, 2D-Arrays zu reduzieren