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