https://www.tutorialspoint.com/rust/rust_collections.htm
Rust의 표준 컬렉션 라이브러리는 일반적인 범용 프로그래밍 데이터 구조의 효율적인 구현을 제공
이 장에서는 일반적으로 사용되는 컬렉션인 Vector, HashMap 및 HashSet의 구현에 대해 설명
Vector는 크기를 조정할 수 있는 배열
Vector는 연결된 메모리 블록들을 저장
미리 정의된 구조제 Vec으로 생성
let mut instance_name = Vec::new();
let vector_name = vec![val1,val2,val3]
Sr.No. | Method | Signature | Description |
---|---|---|---|
1 | new() | pub fn new()->Vec | 비어 있는 새로운 Vec을 생성, 항목을 추가할 때까지 메모리 할당되지 않음 |
2 | push() | pub fn push(&mut self, value: T) | 컬렉션 뒤에 항목를 추가 |
3 | remove() | pub fn remove(&mut self, index:usize)->T | 벡터 내 인덱스 위치에 있는 요소를 제거하고 반환하고 그 뒤의 모든 요소를 왼쪽으로 이동 |
4 | contains() | pub fn contains(&mut self, x:&T)->bool | 슬라이스에 주어진 값을 가진 요소가 포함되어 있으면 true를 반환 |
5 | len() | pub fn len(&self)->usize | 벡터의 요소 수를 반환 |
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);
}
fn main() {
let v = vec![1,2,3];
println!("{:?}",v);
}
fn main() {
let mut v = Vec::new();
v.push(20);
v.push(30);
v.push(40);
println!("{:?}",v);
}
fn main() {
let mut v = vec![10,20,30];
v.remove(1);
println!("{:?}",v);
}
fn main() {
let v = vec![10,20,30];
if v.contains(&10) {
println!("found 10");
}
println!("{:?}",v);
}
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);
}
맵은 key-value pair의 모음
맵의 두 항목은 동일한 키를 가질 수 없음
HashMap은 키와 값을 해시 테이블에 저장
항목은 임의의 순서로 저장
키는 HashMap에서 값을 검색하는 데 사용
HashMap 구조는 std::collections 모듈에 정의
HashMap 구조를 사용하려면 이 모듈을 명시적 선언
let mut instance_name = HashMap::new();
Sr.No. | Method | Signature | Description |
---|---|---|---|
1 | insert() | pub fn insert(&mut self, k:K, v:V)->Option | 지정한 키에 key-value pair를 삽입하고 키가 없으면 None반환, 값 변경 이후에는 이전 값 반환 |
2 | len() | pub fn len(&self)->usize | 항목 수 반환 |
3 | get() | pub fn get<Q:?sized>(&lself, k:&Q)->Option<&V> where K:Borrow, Q:Hash+ Eq | 키에 해당하는 값에 대한 참조를 반환 |
4 | iter() | pub fn iter(&self)->Iter<K, V> | 임의의 순서로 모든 key-value pair를 방문하는 반복자 반환 |
5 | contains_key() | pub fn contains_key<Q:?sized>(&self, k:&Q)->bool | 맵에 지정된 키가 포함되어 있으면 true를 반환 |
6 | remove() | pub fn remove<Q:?sized>(&mut self, k:&Q)->Option<(K, V)> | 맵에서 키를 제거하고 키가 이전에 맵에 있었던 경우 저장된 키와 값을 반환 |
use std::collections::HashMap;
fn main(){
let mut stateCodes = HashMap::new();
stateCodes.insert("KL","Kerala");
stateCodes.insert("MH","Maharashtra");
println!("{:?}",stateCodes);
}
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());
}
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");
}
}
}
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);
}
}
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");
}
}
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 구조는 std::collections 모듈에 정의
HashSet 구조를 사용하려면 이 모듈을 명시적 선언
let mut hash_set_name = HashSet::new();
Sr.No. | Method | Signature | Description |
---|---|---|---|
1 | insert() | pub fn insert(&mut self, value:T)->bool | 집합에 값을 추가, 집합에 이 값이 없으면 true가 반환되고 그렇지 않으면 false가 반환 |
2 | len() | pub fn len(&self)->usize | 항목 수 반환 |
3 | get() | pub fn get<Q:?sized>(&lself, value:&Q)->Option<&T> where T:Borrow, Q:Hash+ Eq | 주어진 값과 동일한 경우 집합의 값에 대한 참조를 반환 |
4 | iter() | pub fn iter(&self)->Iter | 임의의 순서로 모든 항목을 방문하는 반복자 반환 |
5 | contains_key() | pub fn contains_key<Q:?sized>(&self, value:&Q)->bool | 집합에 지정된 값이 있으면 true를 반환 |
6 | remove() | pub fn remove<Q:?sized>(&mut self, value: &Q)->bool | 집합에서 값을 제거, 값이 집합에 있으면 true |
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);
}
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());
}
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);
}
}
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);
}
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");
}
}
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());
}