Rust-컬렉션

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

벡터

Vector는 크기 조정이 가능한 배열입니다. 연속 메모리 블록에 값을 저장합니다. 미리 정의 된 구조 Vec를 사용하여 벡터를 만들 수 있습니다. 벡터의 몇 가지 중요한 기능은 다음과 같습니다.

  • 벡터는 런타임에 늘어나거나 줄어들 수 있습니다.

  • Vector는 동종 컬렉션입니다.

  • 벡터는 데이터를 특정 순서의 요소 시퀀스로 저장합니다. Vector의 모든 요소에는 고유 한 인덱스 번호가 할당됩니다. 인덱스는 0에서 시작하여 n-1까지 올라갑니다. 여기서 n은 컬렉션의 크기입니다. 예를 들어, 5 개 요소의 컬렉션에서 첫 번째 요소는 인덱스 0에 있고 마지막 요소는 인덱스 4에 있습니다.

  • Vector는 끝에 값을 추가합니다. 즉, 벡터를 사용하여 스택을 구현할 수 있습니다.

  • 벡터에 대한 메모리는 힙에 할당됩니다.

구문-벡터 생성

let mut instance_name = Vec::new();

정적 메소드 새로운 ()VEC의 구조는 벡터 인스턴스를 생성하기 위해 사용된다.

또는 vec!를 사용하여 벡터를 만들 수도 있습니다. 매크로. 구문은 다음과 같습니다.

let vector_name = vec![val1,val2,val3]

다음 표는 Vec 구조에서 일반적으로 사용되는 몇 가지 기능을 나열합니다.

Sr. 아니요 방법 서명 및 설명
1 새로운()

pub fn new()->Vect

비어있는 새 Vec를 생성합니다. 벡터는 요소가 푸시 될 때까지 할당되지 않습니다.

2 푸시()

pub fn push(&mut self, value: T)

컬렉션 뒤에 요소를 추가합니다.

없애다()

pub fn remove(&mut self, index: usize) -> T

벡터 내 위치 인덱스에있는 요소를 제거하고 반환하여 그 뒤의 모든 요소를 ​​왼쪽으로 이동합니다.

4 contains ()

pub fn contains(&self, x: &T) -> bool

슬라이스에 주어진 값을 가진 요소가 포함되어 있으면 true를 반환합니다.

5 len ()

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 구조체에 정의 된 정적 메서드 new () 를 사용하여 Vector를 만듭니다 . 푸시 (발) 함수는 컬렉션 매개 변수로 전달 된 값을 추가한다. len () 함수는 벡터의 길이를 반환합니다.

산출

size of vector is :3
[20, 30, 40]

그림 : 벡터 만들기-vec! 매크로

다음 코드는 vec! 매크로. 벡터의 데이터 유형은 벡터에 할당 된 첫 번째 값으로 유추됩니다.

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

산출

[1, 2, 3]

앞서 언급했듯이 벡터는 동일한 데이터 유형의 값만 포함 할 수 있습니다. 다음 스 니펫은 오류 [E0308] : 유형 불일치 오류를 발생시킵니다.

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

그림 : push ()

컬렉션 끝에 요소를 추가합니다.

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

산출

[20, 30, 40]

그림 : remove ()

벡터 내 위치 인덱스에있는 요소를 제거하고 반환하여 그 뒤의 모든 요소를 ​​왼쪽으로 이동합니다.

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

산출

[10, 30]

일러스트-contains ()

슬라이스에 주어진 값을 가진 요소가 포함되어 있으면 true를 반환합니다.

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

산출

found 10
[10, 20, 30]

그림 : len ()

벡터의 요소 수를 반환하며 '길이'라고도합니다.

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

산출

size of vector is :3

벡터에서 값 액세스

벡터의 개별 요소는 해당 인덱스 번호를 사용하여 액세스 할 수 있습니다. 다음 예제는 벡터 광고를 만들고 첫 번째 요소의 값을 인쇄합니다.

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

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

컬렉션에 대한 참조를 사용하여 벡터의 값을 가져올 수도 있습니다.

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);
}

산출

20
30
40
500
[20, 30, 40, 500]

HashMap

맵은 키-값 쌍 (항목이라고 함)의 모음입니다. 맵의 두 항목은 동일한 키를 가질 수 없습니다. 요컨대 맵은 조회 테이블입니다. HashMap은 키와 값을 해시 테이블에 저장합니다. 항목은 임의의 순서로 저장됩니다. 키는 HashMap에서 값을 검색하는 데 사용됩니다. HashMap 구조는std::collections기준 치수. HashMap 구조에 액세스하려면이 모듈을 명시 적으로 가져와야합니다.

구문 : HashMap 생성

let mut instance_name = HashMap::new();

정적 메소드 새로운 ()HashMap의 구조는 HashMap 객체를 생성하는 데 사용된다. 이 메서드는 빈 HashMap을 만듭니다.

일반적으로 사용되는 HashMap 기능은 아래에서 설명합니다.

Sr. 아니요 방법 서명 및 설명
1 끼워 넣다()

pub fn insert(&mut self, k: K, v: V) -> Option

키 / 값 쌍을 삽입합니다. 키가 없으면 None이 반환됩니다. 업데이트 후 이전 값이 반환됩니다.

2 len ()

pub fn len(&self) -> usize

지도의 요소 수를 반환합니다.

가져 오기()

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>

임의의 순서로 모든 키-값 쌍을 방문하는 반복기입니다. 반복기 요소 유형은 (& 'a K, &'a V)입니다.

5 contains_key

pub fn contains_key<Q: ?Sized>(&self, k: &Q) -> bool

맵에 지정된 키의 값이 포함되어 있으면 true를 반환합니다.

6 없애다()

pub fn remove_entry<Q: ?Sized>(&mut self, k: &Q) -> Option<(K, V)>

맵에서 키를 제거하고 키가 이전에 맵에있는 경우 저장된 키와 값을 반환합니다.

그림 : insert ()

HashMap에 키 / 값 쌍을 삽입합니다.

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

위 프로그램은 HashMap을 생성하고 2 개의 키-값 쌍으로 초기화합니다.

산출

{"KL": "Kerala", "MH": "Maharashtra"}

그림 : 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());
}

위의 예제는 HashMap을 만들고 그 안에있는 총 요소 수를 인쇄합니다.

산출

size of map is 2

일러스트-get ()

키에 해당하는 값에 대한 참조를 반환합니다. 다음 예제 는 HashMap에서 키 KL 의 값을 검색합니다 .

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");
      }
   }
}

산출

size of map is 2
{"KL": "Kerala", "MH": "Maharashtra"}
Value for key KL is Kerala

삽화-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);
   }
}

산출

key: MH val: Maharashtra
key: KL val: Kerala

그림 : contains_key ()

맵에 지정된 키의 값이 포함되어 있으면 true를 반환합니다.

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");
   }
}

산출

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());
}

산출

length of the hashmap 3
length of the hashmap after remove() 2

HashSet

HashSet은 유형 T의 고유 값 집합입니다. 값을 추가하고 제거하는 것이 빠르며 주어진 값이 집합에 있는지 여부를 묻는 것이 빠릅니다. HashSet 구조는 std :: collections 모듈에 정의되어 있습니다. HashSet 구조에 액세스하려면이 모듈을 명시 적으로 가져와야합니다.

구문 : HashSet 생성

let mut hash_set_name = HashSet::new();

HashSet 구조 의 정적 메서드 new 는 HashSet을 만드는 데 사용됩니다. 이 메서드는 빈 HashSet을 만듭니다.

다음 표에는 HashSet 구조에서 일반적으로 사용되는 몇 가지 메서드가 나열되어 있습니다.

Sr. 아니요 방법 서명 및 설명
1 끼워 넣다()

pub fn insert(&mut self, value: T) -> bool

세트에 값을 추가합니다. 집합에이 값이 없으면 true가 반환되고 그렇지 않으면 false가 반환됩니다.

2 len ()

pub fn len(&self) -> usize

집합의 요소 수를 반환합니다.

가져 오기()

pub fn get<Q:?Sized>(&self, value: &Q) -> Option<&T> where T: Borrow,Q: Hash + Eq,

주어진 값과 동일한 경우 집합의 값에 대한 참조를 반환합니다.

4 iter ()

pub fn iter(&self) -> Iter

모든 요소를 ​​임의의 순서로 방문하는 반복기를 반환합니다. 반복기 요소 유형은 & 'a T입니다.

5 contains_key

pub fn contains<Q: ?Sized>(&self, value: &Q) -> bool

세트에 값이 포함되어 있으면 true를 반환합니다.

6 없애다()

pub fn remove<Q: ?Sized>(&mut self, value: &Q) -> bool

세트에서 값을 제거합니다. 값이 세트에 있으면 true를 리턴합니다.

스톡 콘텐츠-insert ()

세트에 값을 추가합니다. HashSet은 컬렉션에 중복 값을 추가하지 않습니다.

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);
}

산출

{"TutorialsPoint", "Kannan", "Mohtashim"}

그림 : 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());
}

산출

size of the set is 3

일러스트-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);
   }
}

산출

TutorialsPoint
Mohtashim
Kannan

그림 : 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);
}

산출

found Mohtashim
{"Kannan", "Mohtashim", "TutorialsPoint"}

일러스트-contains ()

세트에 값이 포함되어 있으면 true를 반환합니다.

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");
   }  
}

산출

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());
}

산출

length of the Hashset: 3
length of the Hashset after remove() : 2