在Go中,复制切片是标准费用,如下所示:
# It will figure out the details to match slice sizes
dst = copy(dst[n:], src[:m])
在《铁锈》中,我找不到类似的替换方法。我想到的东西是这样的:
fn copy_slice(dst: &mut [u8], src: &[u8]) -> usize {
let mut c = 0;
for (&mut d, &s) in dst.iter_mut().zip(src.iter()) {
d = s;
c += 1;
}
c
}
不幸的是,我遇到了无法解决的编译错误:
error[E0384]: re-assignment of immutable variable `d`
--> src/main.rs:4:9
|
3 | for (&mut d, &s) in dst.iter_mut().zip(src.iter()) {
| - first assignment to `d`
4 | d = s;
| ^^^^^ re-assignment of immutable variable
如何设置d
?有没有更好的复制切片的方法?
另一种变体是
fn copy_slice(dst: &mut [u8], src: &[u8]) -> usize {
dst.iter_mut().zip(src).map(|(x, y)| *x = *y).count()
}
请注意,在这种情况下,您必须使用count
,因为len
将使用ExactSizeIterator
快捷方式,因此永远不会调用Next
,从而导致无操作。
这个代码工作,即使我不确定它是否是最好的方法。
fn copy_slice(dst: &mut [u8], src: &[u8]) -> usize {
let mut c = 0;
for (d, s) in dst.iter_mut().zip(src.iter()) {
*d = *s;
c += 1;
}
c
}
显然,没有明确指定访问权限就成功了。然而,我仍然对此感到困惑,我的心理模型还没有涵盖那里真正发生的事情。当涉及到这些事情时,我的解决方案大多是反复试验,相反,我更想真正理解。
是的,使用方法clone\u from_slice()
,它是实现clone
的任何元素类型的通用方法。
fn main() {
let mut x = vec![0; 8];
let y = [1, 2, 3];
x[..3].clone_from_slice(&y);
println!("{:?}", x);
// Output:
// [1, 2, 3, 0, 0, 0, 0, 0]
}
目标x
要么是
从Rust 1.9开始,您还可以使用
copy\u from\u slice()
。其工作方式相同,但使用了Copy
特性而不是Clone
,并且是memcpy
的直接包装器。编译器可以优化clone\u from\u slice
,使之在适用时等效于copy\u from\u slice
,但它仍然有用。
问题内容: 我正在尝试将地图()的内容复制到另一个地图()内,然后清除, 以便它可以在下一次迭代/循环中获取新值。问题在于,如果不清除超级地图中的参考,就无法清除地图。这是一些伪代码。 我也尝试了一些动态的东西,但显然会引发错误(无法指定为nil) 问题是如何创建关联地图?在PHP中,我只使用aSuperMap [y] [x] = aData。似乎golang没有任何明显的方法。如果我从超级地图中
问题内容: 我在正在研究的项目中遇到问题。我找到了解决方法,但是我不确定为什么我的解决方案有效。我希望对Go指针的工作方式有更多经验的人能对我有所帮助。 我有一个Model接口和一个实现该接口的Region结构。Model接口是在Region结构的指针上实现的。我也有一个Regions集合,它是Region对象的一部分。我有一种方法可以将Regions对象转换为[] Model: 当我运行此代码时
我需要在Go中复制一个切片,并读取文档。有一个复制功能可供我使用。 copy内置函数将元素从源片复制到目标片。(作为一种特殊情况,它还会将字节从字符串复制到字节片。)源和目标可能重叠。Copy返回复制的元素数,它是len(src)和len(dst)中的最小值。 但当我这样做的时候: 我的和以前一样是空的(我甚至尝试使用): 你可以去游乐场看看。那么为什么我不能复制一个切片呢?
Go语言的内置函数 copy() 可以将一个数组切片复制到另一个数组切片中,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。 copy() 函数的使用格式如下: copy( destSlice, srcSlice []T) int 其中 srcSlice 为数据来源切片,destSlice 为复制的目标(也就是将 srcSlice 复制到 destSlice),目
问题内容: 我在做下面的运动。 创建一个包含四个元素的切片。 创建一个新切片,并将第三个和第四个元素仅复制到其中。 我已经返回了以下程序 我程序的输出是。但我希望newElements切片为[3 4]- 我的程序出了什么问题。 问题答案: 使用内置的复制功能将元素从一个切片复制到另一个切片。 在操场上跑 您可以使用append创建切片并在单个语句中复制元素,但是代码并不像使用copy那样明显。 在
编者按:这个问题来自Rust 1.0之前的版本,引用了Rust 1.0中不存在的一些项目。答案仍然包含有价值的信息。 从(比如说)一个转换成的惯用方法是什么? 例如,使用进行铸造,并且类型铸造上的Rust 0.12参考文件 数值可以转换为任何数值类型。原始指针值可以转换为任何整型或原始指针类型。不支持任何其他强制转换,并且将无法编译。 但是,将自动溢出并给出0的结果。 我发现了ToPrimitiv