生锈,分裂的多维向量?

时间:2013-05-17 03:57:35

标签: multidimensional-array struct rust

在C#中,我可以做这样的事情

class Map {    
    public Tile[, ,] Location = new Tile[6, 256, 256];
}

稍后使用类似Location[2, 40, 20]

的内容访问任何Tile元素

我正在尝试在Rust中制作类似的结构,但我发现语法有点奇怪。我确实拿出了这个,但它是用大的矢量大小(用完了堆栈?)来实现的:

use tile::Tile // Simple struct with a few Point properties

pub struct Map {
    location: [[[Tile, ..256], ..256], ..6],
}

pub impl Map {
    fn new() -> Map {
        Map {
            // assuming empty_tile is a Tile I've just created
            location: [[[empty_tile, ..256], ..256], ..6]
        }
    }
}

我是不是错了?它运行得非常慢,大尺寸分段。也许有更好的方法来存储瓷砖的三维空间(层,宽度,高度)?

编辑:这是在我尝试制作那些Tiles可变的

之前

1 个答案:

答案 0 :(得分:4)

[[[Tile, ..256], ..256], ..6]是堆栈分配的,它可能大约是60MB。尝试~[~[~[Tile, ..256], ..256], ..6],这是一个拥有的指针(在发送堆上分配,拥有指针可以跨任务发送)