[英]Vector of tuples with different size
我目前正在使用 Rust 实施行进立方体算法,我遇到了一个问题。 该算法需要使用我从GitHub复制的三角表。但是Rust中的哪个数据结构允许我们存储这样的数据?
这些元组意味着立方体的哪些边必须连接,所以它们的大小都不同。
pub fn tri_table()-> Vec<???>
{
return vec![
(),
(0, 8, 3),
(0, 1, 9),
(1, 8, 3, 9, 8, 1),
(1, 2, 10),
(0, 8, 3, 1, 2, 10),
(9, 2, 10, 0, 2, 9),
(2, 8, 3, 2, 10, 8, 10, 9, 8),
(3, 11, 2),
(0, 11, 2, 8, 11, 0),
(1, 9, 0, 2, 3, 11),
(1, 11, 2, 1, 9, 11, 9, 8, 11),
(3, 10, 1, 11, 10, 3),
(0, 10, 1, 0, 8, 10, 8, 11, 10),
(3, 9, 0, 3, 11, 9, 11, 10, 9),
(9, 8, 10, 10, 8, 11),
(4, 7, 8),
...
];
}
听起来你的三角测量表在编译时是已知的。 在这种情况下,使用 static 个切片。 这是成本最低的解决方案,它的开销几乎为零。 对于以后不能再修改的价格。
像这样:
pub fn tri_table() -> &'static [&'static [i32]] {
&[
&[],
&[0, 8, 3],
&[0, 1, 9],
&[1, 8, 3, 9, 8, 1],
&[1, 2, 10],
&[0, 8, 3, 1, 2, 10],
&[9, 2, 10, 0, 2, 9],
&[2, 8, 3, 2, 10, 8, 10, 9, 8],
&[3, 11, 2],
// ...
]
}
通过这样做,数据将直接烘焙到可执行文件的数据段中,调用tri_table()
仅返回指向它的指针,不会发生分配,也不会使用堆 memory。 多次调用tri_table()
将始终返回对同一地址的引用,因此如果多次调用它也不会产生开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.