Rust 中相对向量大小调整的一行代码
One-liner for relative-vector-resizing in Rust
如果我想在 C++/Swift/Any 其他语言中调整向量的大小,我通常会写这样的东西 my_vec.resize(my_vec.size(), 0x00);
但是如果我在 Rust 中尝试这样做,我会得到错误 immutable borrow occurs here
。
我当然可以这样写:
let old_size = my_vec.len();
my_vec.resize(old_size - 2, 0x00);
但我很确定有一条线...
您目前无法按照 中所述将两行合二为一。
but I'm pretty sure that there is an one-liner...
当然:
{ let old_size = my_vec.len(); my_vec.resize(old_size - 2, 0x00); }
不厚脸皮,可以加一个trait方法:
trait ResizeRelative<T> {
fn resize_relative(&mut self, delta: isize, default: T);
}
impl<T: Clone> ResizeRelative<T> for Vec<T> {
fn resize_relative(&mut self, delta: isize, default: T) {
let len = if delta < 0 {
self.len() - ((-delta) as usize)
} else {
self.len() + delta as usize
};
self.resize(len, default);
}
}
fn main() {
let mut v = Vec::new();
v.resize_relative(3, 42);
v.resize_relative(-1, 2);
println!("{:?}", v);
}
注意您需要执行的旋转才能在两个方向上调整大小。即便如此,如果您将大小调整到零以下,仍有可能出现恐慌。
如果我想在 C++/Swift/Any 其他语言中调整向量的大小,我通常会写这样的东西 my_vec.resize(my_vec.size(), 0x00);
但是如果我在 Rust 中尝试这样做,我会得到错误 immutable borrow occurs here
。
我当然可以这样写:
let old_size = my_vec.len();
my_vec.resize(old_size - 2, 0x00);
但我很确定有一条线...
您目前无法按照
but I'm pretty sure that there is an one-liner...
当然:
{ let old_size = my_vec.len(); my_vec.resize(old_size - 2, 0x00); }
不厚脸皮,可以加一个trait方法:
trait ResizeRelative<T> {
fn resize_relative(&mut self, delta: isize, default: T);
}
impl<T: Clone> ResizeRelative<T> for Vec<T> {
fn resize_relative(&mut self, delta: isize, default: T) {
let len = if delta < 0 {
self.len() - ((-delta) as usize)
} else {
self.len() + delta as usize
};
self.resize(len, default);
}
}
fn main() {
let mut v = Vec::new();
v.resize_relative(3, 42);
v.resize_relative(-1, 2);
println!("{:?}", v);
}
注意您需要执行的旋转才能在两个方向上调整大小。即便如此,如果您将大小调整到零以下,仍有可能出现恐慌。