for and iterators

for문과 iterators에 대해 알아보자.

For 문


fn main() {

	for n in 1..101 {
		println!("{n}");
	}

	for n in 1..=100 {
		
		println!(" 숫자 100까지 출력 {n}");

	} 

}

Iterators

iterators 형은 for문 형태로 적용이 가능한 포맷을 말한다. 다시 말하면 loop 문이 가능하다. 또한 러스트에는 iter 종류가 3가지 존재한다.

  • iter - borrows, 데이터를 참조만 할 수 있다.
  • iter_mut - mutably borrows, 변환 가능하게 참조한다.
  • into_iter - consumes, 러스트에서 데이터에서 끄내온 객체는 더 이상 그 객체의 데이터는 사용이 불가능하다. 해당 소비된 데이터는 move 이동하였기 때문이다.

iter()

fn main() {
    let name1 = vec!["hell", "low", "world"];

    for n in name1.iter() {
        // 참조로 사용하는 중
        match n {
            &"hell" => {
                println!("name : {}", n);
            }
            _ => {
                println!("others");
            }
        }
    }
}

iter_mut()

fn main(){

    let mut name2 = vec!["hell", "low", "world"];
    for (index,n) in name2.iter_mut().enumerate() {
        // mutable 하게 사용 가능.
	// *는 ref된 데이터를 온전한 데이터로 사용한다는 것을 의미한다. 즉 온전한 데이터이기 때문에 다른 value 값을 넣을 수 있다.
        *n = match n {
            &mut "world" => "tony",
            _ => if index == 0 {
                "finally"
            }else {
                "i found "
            }
        }

    }
    println!("{:?}", name2);

}

into_iter()


fn main() {
    
    let name3 = vec!["hell", "low", "world"];

    for n in name3.into_iter() {
    	//데이터 이동 중...
        match n {
           "world" => println!("hii"),
            _ => println!("...")
        }
    }
    //move, consume 되었기 때문에 더 이상 사용이 불가능하다.
    //println!("{:?}", name3);
}