Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Iterator::any

Iterator::any는 이터레이터가 주어졌을 때, 어떤 요소라도 서술어(predicate)를 만족하면 true를 반환하는 함수입니다. 그렇지 않으면 false를 반환합니다. 시그니처는 다음과 같습니다:

pub trait Iterator {
    // 반복되는 요소의 타입.
    type Item;

    // `any`는 `&mut self`를 취하므로 호출자는 빌려지거나
// 수정될 수 있지만, 소비(consume)되지는 않습니다.
    fn any<F>(&mut self, f: F) -> bool where
        // `FnMut`는 캡처된 변수가 최대 수정될 수 있지만 소비되지는 않음을 의미합니다.
// `Self::Item`은 클로저 파라미터 타입으로, 이터레이터에 의해 결정됩니다
// (예: `.iter()`의 경우 `&T`, `.into_iter()`의 경우 `T`).
        F: FnMut(Self::Item) -> bool;
}
fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];

    // 벡터에 대한 `iter()`는 `&i32`를 생성합니다. `i32`로 구조 분해합니다.
    println!("vec1에 2가 있음: {}", vec1.iter()     .any(|&x| x == 2));
    // 벡터에 대한 `into_iter()`는 `i32`를 생성합니다. 구조 분해가 필요 없습니다.
    println!("vec2에 2가 있음: {}", vec2.into_iter().any(|x| x == 2));

    // `iter()`는 오직 `vec1`과 그 요소들을 빌리기만 하므로, 다시 사용할 수 있습니다.
    println!("vec1 길이: {}", vec1.len());
    println!("vec1의 첫 번째 요소: {}", vec1[0]);
    // `into_iter()`는 `vec2`와 그 요소들을 이동(move)시키므로, 다시 사용할 수 없습니다.
// println!("vec2의 첫 번째 요소: {}", vec2[0]);
// println!("vec2 길이: {}", vec2.len());
// TODO: 위의 두 줄의 주석을 해제하고 컴파일 에러를 확인해 보세요.

    let array1 = [1, 2, 3];
    let array2 = [4, 5, 6];

    // 배열에 대한 `iter()`는 `&i32`를 생성합니다.
    println!("array1에 2가 있음: {}", array1.iter()     .any(|&x| x == 2));
    // 배열에 대한 `into_iter()`는 `i32`를 생성합니다.
    println!("array2에 2가 있음: {}", array2.into_iter().any(|x| x == 2));
}

참고:

std::iter::Iterator::any