我有一个相当简单的函数(让我们将其命名为cross),该函数接受两个类型为&[u32]
的参数,并且我希望返回类型为&[u32]
.此函数接受两个片(数组?),并返回一个新的片(数组?),其中包含两个片中的元素.
pub fn intersection<'a>(left: &'a [u32], right: &'a [u32]) -> &'a [u32] {
let left_set: HashSet<u32> = left.iter().cloned().collect();
let right_set: HashSet<u32> = right.iter().cloned().collect();
// I can't figure out how to get a
// `&[u32]` output idiomatically
let result: &[u32] = left_set
.intersection(&right_set)
.into_iter()
.....
.....
result //<- this is a slice
}
我想我可以做一些事情,比如创造一个Vec<u32>
,但然后借入收银员不喜欢我退还这Vec<u32>
.
pub fn intersection<'a>(left: &'a [u32], right: &'a [u32]) -> &'a [u32] {
.....
.....
let mut result: Vec<u32> = left_set
.intersection(&right_set)
.into_iter()
.cloned()
.collect();
result.sort();
result.as_slice() //<-- ERROR cannot return reference to local variable
// `result` returns a reference to data owned by the current function
}
我可能错过了一个小把戏.对于如何在《铁 rust 》中用习语来做这件事,有什么建议吗?