본문 바로가기
카테고리 없음

러스트 공부하기 5일차 #2

by Ryan Kim 2022. 11. 13.

러스트가 텍스트를 처리하는 방식

for line in quote.lines() { --> quote는 "문자열" lines()는 텍스트를 한 줄씩 반환.
if line.contains(search_term) { --> line은 한줄의 "문자열" contains는 텍스트를 검색.
println!("{}", line);
}
}

 

인덱스 변수를 자동으로 증가시키기

for(i, line) in quote.lines().enumerate() {
if line.contains

 

배열, 슬라이스, 벡터로 리스트 만들기

세가지 중에 가장 유용한 타입은 벡터다. 벡터를 공부하려면 먼저 배열과 슬라이스라는 두 가지 친척이 있다.

 

배열

배열 내의 항목은 바꿀 수는 있지만 그 크기는 변경할 수 없다. 

배열을 생성하는 방법은 두 가지가 있다.

대괄호 안에 쉼표로 구분된 목록, 세미콜론으로 구분된 두 값을 입력한느 반복 표현식을 사용할 수 있다. 

let one                            =[1, 2, 3];
let two: [u8; 3]                = [1, 2, 3];
let blank1                      = [0; 3];
let blank2: [u8; 3]         = [0;  3];

[T; n]은 배열의 타입을 나타낸다. 여기서 T는 요소의 타입이고 n은 길이를 나타내는 자연수다. 

[u8; 3]은 [u8; 4]와 다른 타입이다. 배열의 크기는 타입 시스템에서 중요하다.

러스트는 안전에 주안점으 둔다. 배열의 인덱스를 지정할 때는 경계를 검사한다. 범위를 벗어난 항목을 요청하면

잘못된 데이터를 반환하는 대신 프로그램이 종료된다.

 

슬라이스

1) 슬라이스는 동적인 크기를 가지는 배열과 비슷한 객체다. 동적 크기라는 용어에서 알 수 있듯이 컴파일 시 해당 슬라이스의 크기를 알 수 없다. 그런데 배열과 마찬가지로 확장하거나 축소할 수 없다. 

2) 컴파일 시 크기를 알 수 있는지 여부로 배열([T; n])과 슬라이스([T])간의 타입 시그너처 차이를 설명할 수 있다.

3) 슬라이스는 특정 크기에 묶이지 않아 배열에서 슬라이스를 생성하는 것이 쉽고 값싸다.

4) 슬라이스 크기는 메모리에 고정된다. 이는 두 가지 usize 요소(포인터와 길이)로 구성된다.

 

벡터

1) 벡터(Vec<T>)는 확장 가능한 T의 리스트다. 러스트 코드에서는 벡터를 매우 흔하게 사용한다.  

2) 배열에 비해 성능이 약간 떨어진다. 

let mut tags: Vec<usize> = Vec::new();
let mut ctx: Vec<Vec<(usize, String)>> = Vec::new();
Vec::with_capacity(n) --> n개의 항목을 위한 공간을 예약
saturating_sub() --> 뺄셈을 할 때 정수가 0보다 작아지면 프로그램을 강제 종료하는 대신 0을 반환.