>
내 함수는 Vec 를 반환합니다.  튜플에 대한 참조가 있지만 Vec 가 필요합니다.  튜플 수 :

use std::collections::HashSet;
fn main() {
    let maxs: HashSet<(usize, usize)> = HashSet::new();
    let mins: HashSet<(usize, usize)> = HashSet::new();
    let intersection = maxs.intersection(&mins).collect::<Vec<&(usize, usize)>>();
}

전환은 어떻게해야합니까?

오류 :

19 |     maxs.intersection(&mins).collect::<Vec<&(usize, usize)>>()
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected tuple, found reference
   |
   = note: expected type `std::vec::Vec<(usize, usize)>`
          found type `std::vec::Vec<&(usize, usize)>`

저는 for 사용  루프하여 변환을 수행하지만 마음에 들지 않으며 관용적 인 방식이 있어야한다고 생각합니다.

for t in maxs.intersection(&mins).collect::<Vec<&(usize, usize)>>().iter() {
    output.push(**t);
}


  • 답변 # 1

    1.36.0에서 업데이트

    Rust 1.36.0에 copied 가 도입되었습니다   cloned 처럼 작동합니다 하지만 Copy 를 사용합니다  사본이 저렴해야하는 특성 (예 : memcpy )  뿐). Copy 를 구현하는 기본 유형 또는 유형이있는 경우  대신 사용할 수 있습니다.

    <시간>

    예제를 작동 시키려면 cloned 를 사용하십시오.  그런 다음 collect .

    let maxs: HashSet<(usize,usize)> = HashSet::new();
    let mins: HashSet<(usize,usize)> = HashSet::new();
    let output: Vec<(usize, usize)> = maxs.intersection(&mins).cloned().collect();
    
    
    <시간> 이 솔루션은 Clone 를 구현하는 것보다 모든 유형에서 작동합니다. :

    pub fn clone_vec<T: Clone>(vec: Vec<&T>) -> Vec<T> {
        vec.into_iter().cloned().collect()
    }
    
    
    함수가 슬라이스를 허용하면 cloned 를 사용해야합니다  두 번.

    pub fn clone_slice<T: Clone>(slice: &[&T]) -> Vec<T> {
        slice.iter().cloned().cloned().collect()
    }
    
    

    이 이유는 iter()  슬라이스의 참조에 대해 반복자를 반환하여 &&T 가됩니다. .

    <시간>

    Clone 를 구현하지 않는 유형이있는 경우 , 당신은 map 와 행동을 모방 할 수 있습니다

    pub struct Foo(u32);
    impl Foo {
        fn dup(&self) -> Self {
            Foo(self.0)
        }
    }
    pub fn clone_vec(vec: Vec<&Foo>) -> Vec<Foo> {
        vec.into_iter().map(|f| f.dup()).collect()
    }
    pub fn clone_vec2(vec: Vec<&Foo>) -> Vec<Foo> {
        // this function is identical to `ret_tup`, but with another syntax
        vec.into_iter().map(Foo::dup).collect()
    }
    
    

    (운동장)

  • 이전 java - 내 프로그램이 실제보다 적은 줄을 읽는 이유는 무엇입니까? 그리고 왜 내 배열이 하나만 받아들입니까?
  • 다음 javascript - 호버에서 반응 끈 팝 오버를 사용하는 방법은 무엇입니까?