Rust - Collections

Mickey·2022년 1월 15일
0

Rust

목록 보기
21/32
post-thumbnail
post-custom-banner

https://www.tutorialspoint.com/rust/rust_collections.htm

Rust의 표준 컬렉션 라이브러리는 일반적인 범용 프로그래밍 데이터 구조의 효율적인 구현을 제공
이 장에서는 일반적으로 사용되는 컬렉션인 Vector, HashMap 및 HashSet의 구현에 대해 설명

Vector

Vector는 크기를 조정할 수 있는 배열
Vector는 연결된 메모리 블록들을 저장
미리 정의된 구조제 Vec으로 생성

  • Vector는 런타임에 커지거나 줄어들 수 있음
  • Vector는 동종 컬렉션
  • Vector는 데이터를 특정 순서의 요소 시퀀스로 저장
    Vector의 모든 요소에는 고유한 인덱스 번호 할당
    인덱스는 0에서 시작하여 n-1까지, n은 컬렉션의 크기
  • Vector는 끝에만 값 추가
    Vector를 사용하여 스택을 구현 가능
  • Vector는 힙에 할당
let mut instance_name = Vec::new();

let vector_name = vec![val1,val2,val3]
Sr.No.MethodSignatureDescription
1new()pub fn new()->Vec비어 있는 새로운 Vec을 생성, 항목을 추가할 때까지 메모리 할당되지 않음
2push()pub fn push(&mut self, value: T)컬렉션 뒤에 항목를 추가
3remove()pub fn remove(&mut self, index:usize)->T벡터 내 인덱스 위치에 있는 요소를 제거하고 반환하고 그 뒤의 모든 요소를 왼쪽으로 이동
4contains()pub fn contains(&mut self, x:&T)->bool슬라이스에 주어진 값을 가진 요소가 포함되어 있으면 true를 반환
5len()pub fn len(&self)->usize벡터의 요소 수를 반환

벡터 만들기 - new()

fn main() {
   let mut v = Vec::new();
   v.push(20);
   v.push(30);
   v.push(40);

   println!("size of vector is :{}",v.len());
   println!("{:?}",v);
}


벡터 만들기 - vec! 매크로

fn main() {
   let v = vec![1,2,3];
   println!("{:?}",v);
}


push()

fn main() {
   let mut v = Vec::new();
   v.push(20);
   v.push(30);
   v.push(40);
   
   println!("{:?}",v);
}


remove()

fn main() {
   let mut v = vec![10,20,30];
   v.remove(1);
   println!("{:?}",v);
}


contains()

fn main() {
   let v = vec![10,20,30];
   if v.contains(&10) {
      println!("found 10");
   }
   println!("{:?}",v);
}


len()

fn main() {
   let v = vec![1,2,3];
   println!("size of vector is :{}",v.len());
}

값 접근

벡터의 개별 요소는 해당 인덱스 번호를 사용하여 액세스

fn main() {
   let mut v = Vec::new();
   v.push(20);
   v.push(30);

   println!("{:?}",v[0]);
}

fn main() {
   let mut v = Vec::new();
   v.push(20);
   v.push(30);
   v.push(40);
   v.push(500);

   for i in &v {
      println!("{}",i);
   }
   println!("{:?}",v);
}


HashMap

맵은 key-value pair의 모음
맵의 두 항목은 동일한 키를 가질 수 없음
HashMap은 키와 값을 해시 테이블에 저장
항목은 임의의 순서로 저장
키는 HashMap에서 값을 검색하는 데 사용
HashMap 구조는 std::collections 모듈에 정의
HashMap 구조를 사용하려면 이 모듈을 명시적 선언

let mut instance_name = HashMap::new();
Sr.No.MethodSignatureDescription
1insert()pub fn insert(&mut self, k:K, v:V)->Option지정한 키에 key-value pair를 삽입하고 키가 없으면 None반환, 값 변경 이후에는 이전 값 반환
2len()pub fn len(&self)->usize항목 수 반환
3get()pub fn get<Q:?sized>(&lself, k:&Q)->Option<&V> where K:Borrow, Q:Hash+ Eq키에 해당하는 값에 대한 참조를 반환
4iter()pub fn iter(&self)->Iter<K, V>임의의 순서로 모든 key-value pair를 방문하는 반복자 반환
5contains_key()pub fn contains_key<Q:?sized>(&self, k:&Q)->bool맵에 지정된 키가 포함되어 있으면 true를 반환
6remove()pub fn remove<Q:?sized>(&mut self, k:&Q)->Option<(K, V)>맵에서 키를 제거하고 키가 이전에 맵에 있었던 경우 저장된 키와 값을 반환

insert()

use std::collections::HashMap;
fn main(){
   let mut stateCodes = HashMap::new();
   stateCodes.insert("KL","Kerala");
   stateCodes.insert("MH","Maharashtra");
   println!("{:?}",stateCodes);
}


len()

use std::collections::HashMap;
fn main() {
   let mut stateCodes = HashMap::new();
   stateCodes.insert("KL","Kerala");
   stateCodes.insert("MH","Maharashtra");
   println!("size of map is {}",stateCodes.len());
}


get()

use std::collections::HashMap;
fn main() {
   let mut stateCodes = HashMap::new();
   stateCodes.insert("KL","Kerala");
   stateCodes.insert("MH","Maharashtra");
   println!("size of map is {}",stateCodes.len());
   println!("{:?}",stateCodes);

   match stateCodes.get(&"KL") {
      Some(value)=> {
         println!("Value for key KL is {}",value);
      }
      None => {
         println!("nothing found");
      }
   }
}


iter()

use std::collections::HashMap;
fn main() {
   let mut stateCodes = HashMap::new();
   stateCodes.insert("KL","Kerala");
   stateCodes.insert("MH","Maharashtra");

   for (key, val) in stateCodes.iter() {
      println!("key: {} val: {}", key, val);
   }
}


contains_key()

use std::collections::HashMap;
fn main() {
   let mut stateCodes = HashMap::new();
   stateCodes.insert("KL","Kerala");
   stateCodes.insert("MH","Maharashtra");
   stateCodes.insert("GJ","Gujarat");

   if stateCodes.contains_key(&"GJ") {
      println!("found key");
   }
}


remove()

use std::collections::HashMap;
fn main() {
   let mut stateCodes = HashMap::new();
   stateCodes.insert("KL","Kerala");
   stateCodes.insert("MH","Maharashtra");
   stateCodes.insert("GJ","Gujarat");

   println!("length of the hashmap {}",stateCodes.len());
   stateCodes.remove(&"GJ");
   println!("length of the hashmap after remove() {}",stateCodes.len());
}


HashSet

HashSet은 특정 형식의 고유한 값들의 집합
값의 추가와 제거가 빠르고, 주어진 값이 집합에 있는지 없는지를 묻는 것도 빠름
HashSet 구조는 std::collections 모듈에 정의
HashSet 구조를 사용하려면 이 모듈을 명시적 선언

let mut hash_set_name = HashSet::new();
Sr.No.MethodSignatureDescription
1insert()pub fn insert(&mut self, value:T)->bool집합에 값을 추가, 집합에 이 값이 없으면 true가 반환되고 그렇지 않으면 false가 반환
2len()pub fn len(&self)->usize항목 수 반환
3get()pub fn get<Q:?sized>(&lself, value:&Q)->Option<&T> where T:Borrow, Q:Hash+ Eq주어진 값과 동일한 경우 집합의 값에 대한 참조를 반환
4iter()pub fn iter(&self)->Iter임의의 순서로 모든 항목을 방문하는 반복자 반환
5contains_key()pub fn contains_key<Q:?sized>(&self, value:&Q)->bool집합에 지정된 값이 있으면 true를 반환
6remove()pub fn remove<Q:?sized>(&mut self, value: &Q)->bool집합에서 값을 제거, 값이 집합에 있으면 true

insert()

use std::collections::HashSet;
fn main() {
   let mut names = HashSet::new();

   names.insert("Mohtashim");
   names.insert("Kannan");
   names.insert("TutorialsPoint");
   names.insert("Mohtashim");//duplicates not added

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


len()

use std::collections::HashSet;
fn main() {
   let mut names = HashSet::new();
   names.insert("Mohtashim");
   names.insert("Kannan");
   names.insert("TutorialsPoint");
   println!("size of the set is {}",names.len());
}


iter()

use std::collections::HashSet;
fn main() {
   let mut names = HashSet::new();
   names.insert("Mohtashim");
   names.insert("Kannan");
   names.insert("TutorialsPoint");
   names.insert("Mohtashim");

   for name in names.iter() {
      println!("{}",name);
   }
}


get()

use std::collections::HashSet;
fn main() {
   let mut names = HashSet::new();
   names.insert("Mohtashim");
   names.insert("Kannan");
   names.insert("TutorialsPoint");
   names.insert("Mohtashim");

   match names.get(&"Mohtashim"){
      Some(value)=>{
         println!("found {}",value);
      }
      None =>{
         println!("not found");
      }
   }
   println!("{:?}",names);
}


contains()

use std::collections::HashSet;

fn main() {
   let mut names = HashSet::new();
   names.insert("Mohtashim");
   names.insert("Kannan");
   names.insert("TutorialsPoint");

   if names.contains(&"Kannan") {
      println!("found name");
   }  
}


remove()

use std::collections::HashSet;

fn main() {
   let mut names = HashSet::new();
   names.insert("Mohtashim");
   names.insert("Kannan");
   names.insert("TutorialsPoint");
   println!("length of the Hashset: {}",names.len());
   names.remove(&"Kannan");
   println!("length of the Hashset after remove() : {}",names.len());
}

profile
Mickey
post-custom-banner

0개의 댓글