内容简介:翻译自:https://stackoverflow.com/questions/40154150/how-do-i-concatenate-two-slices-in-rust
我想从向量中获取x个第一个和最后一个元素并将它们连接起来.我有以下代码:
fn main() {
let v = (0u64 .. 10).collect::<Vec<_>>();
let l = v.len();
vec![v.iter().take(3), v.iter().skip(l-3)];
}
这给了我错误
error[E0308]: mismatched types --> <anon>:4:28 | 4 | vec![v.iter().take(3), v.iter().skip(l-3)]; | ^^^^^^^^^^^^^^^^^^ expected struct `std::iter::Take`, found struct `std::iter::Skip` <anon>:4:5: 4:48 note: in this expansion of vec! (defined in <std macros>) | = note: expected type `std::iter::Take<std::slice::Iter<'_, u64>>` = note: found type `std::iter::Skip<std::slice::Iter<'_, u64>>`
我如何获得1,2,3,8,9,10的vec?我正在使用Rust 1.12.
你应该使用skip()的gather()ed结果收集()take()和extend()它们的结果:
let mut p1 = v.iter().take(3).collect::<Vec<_>>();
let p2 = v.iter().skip(l-3);
p1.extend(p2);
println!("{:?}", p1);
编辑:正如Neikos所说,你甚至不需要收集skip()的结果,因为extend()接受实现IntoIterator的参数(Skip会这样做,因为它是迭代器).
编辑2:你的数字有点偏;为了获得1,2,3,8,9,10,你应该声明v如下:
let v = (1u64 .. 11).collect::<Vec<_>>();
由于
Range
是左关闭和右开.
翻译自:https://stackoverflow.com/questions/40154150/how-do-i-concatenate-two-slices-in-rust
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
构建高性能Web站点
郭欣 / 电子工业出版社 / 2012-6 / 75.00元
《构建高性能Web站点(修订版)》是畅销修订版,围绕如何构建高性能Web站点,从多个方面、多个角度进行了全面的阐述,几乎涵盖了Web站点性能优化的所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存、脚本解释速度、页面组件分离、浏览器本地缓存、浏览器并发请求、文件的分发、数据库I/O优化、数据库访问、数据库分布式......一起来看看 《构建高性能Web站点》 这本书的介绍吧!