Assemblyscript: 交换二维数组?

创建于 2019-10-23  ·  3评论  ·  资料来源: AssemblyScript/assemblyscript

我有一个接受 i32 值的二维数组的类。 这是我的代码:

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>> {
    ...
    }
}

这就是我试图实例化它的方式:

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);

有没有办法可以分配二维值数组? 如果没有,是否有一种优雅的方式可以分配每个一维数组,并将Array<i32>指针数组传递给类构造函数?

编辑:我想我可以展平二维数组,然后传入宽度,但我希望有更好的解决方案。

question stale

最有用的评论

但是如果你需要真正的性能,使用展平二维数组总是要好得多

所有3条评论

尝试首先分配整数数组的内部数组,然后分配整数数组的外部数组,例如使用这些 id:

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

但是如果你需要真正的性能,使用展平二维数组总是要好得多

此问题已自动标记为过时,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

torch2424 picture torch2424  ·  5评论

kyegupov picture kyegupov  ·  3评论

MaxGraey picture MaxGraey  ·  3评论

jerrywdlee picture jerrywdlee  ·  4评论

pannous picture pannous  ·  4评论