gpt4 book ai didi

rust - 如何查看添加了头部和尾部的切片?

转载 作者:行者123 更新时间:2023-11-29 08:16:21 25 4
gpt4 key购买 nike

我正在尝试获取切片的“ View ”(即不复制),其中包含前置头元素以及附加到它的最后一个元素。

我知道如何使用 Groovy(可能还有 Ruby)语法来表达它:

def elements = [ 'a', 'b' ]
def result = [ 'head', *elements, 'tail' ]
assert result == [ 'head', 'a', 'b', 'tail' ]

上面的*就是展开运算符。

在 Rust 中,这似乎有点难......我只能找到将切片复制到可变向量中,然后压入并插入尾部和头部的解决方案。

我希望可以使用可迭代对象或看起来只包含我想要的元素的东西,如上例所示...在 Rust 中可能吗?怎么办?

最佳答案

如果你只需要一个迭代器,你可以使用iter::onceIterator::chain :

use std::iter;

fn main() {
let elements = ["a", "b"];
let head = iter::once("head");
let tail = iter::once("tail");
let result = head.chain(elements.iter().cloned()).chain(tail);

assert!(["head", "a", "b", "tail"].iter().cloned().eq(result));
}

我还必须使用 cloned,因为数组的 Iterator::Item 是对值的引用,因此是 &&strcloned 转换回 &str


Is it possible in Rust?

绝对不可能用“额外”元素构造切片。

根据定义,切片在内存中连续 的一系列值。它的字面定义是一个指向数据开始和元素个数的指针。根本没有存储“额外”元素的位置。

关于rust - 如何查看添加了头部和尾部的切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43988231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com