gpt4 book ai didi

vector - 是否有一种简单的方法可以从 `Vec` 中准确提取一个元素?

转载 作者:行者123 更新时间:2023-12-03 11:25:30 25 4
gpt4 key购买 nike

我引用了一个 Vec我想从中提取对一个元素的引用,如果有更多元素或零,则 panic 。如果我有一个数组,则等效为:

let [x] = list;
但是 Vec s 是动态调整大小的,因此在这里不起作用。我可以想到一种方法来引用 Vec ,还有一些需要所有权的,但我想知道是否有更短更简单的方法。
无主选项 1:使用 assert!和索引
assert_eq!(list.len(), 1);
let x = &list[0];

拥有的选项 1:使用 try_into()
let [x]: [i32; 1] = list.try_into().unwrap();
拥有的选项 2:使用 assert!pop
assert_eq!(list.len(), 1);
let x = list.pop();

那么,有没有更短更清晰的方法呢?

最佳答案

您可以使用 slice pattern ( playground ):

let v = vec![1u32];
let x = match v.as_slice() {
&[x] => x,
_ => panic!("expected single element"),
};
// ... use x ...
它不一定更短,但很明显,不需要所有权或变异,并且可以很好地推广到多个要提取的元素。
如果您想检查元素计数并提取 x 而不是 panic 如果它是唯一的元素,则可以使用 if let :
if let &[x] = v.as_slice() {
// ... use x ...
}

关于vector - 是否有一种简单的方法可以从 `Vec` 中准确提取一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65043920/

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