如何在Rust中连接两个切片?

栏目: 编程语言 · Rust · 发布时间: 7年前

内容简介:翻译自: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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《10%创业家》

《10%创业家》

[美] 帕特里克•J.麦金尼斯 / 李文远 / 广东人民出版社 / 2017-4 / 45.00

还在打工和创业之间苦苦挣扎吗?麦金尼斯用亲身经历告诉你,不用辞职,只需投入10%的时间和资源,就能获得100%的财务自由。你不需要雄厚的资本,也不必占用工作时间,只要准确掌握本书所授的方法,就能立即开始创业。 麦金尼斯是世界银行风投顾问,同时也是一名10%创业家。在本书中,他结合自身的创业咨询经历,为读者讲解了移动互联时代的5种创业模式,还提供了创业基因测试、10%创业计划、自传模板等个性化......一起来看看 《《10%创业家》》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具