러스트에서 배열을 정렬하는 다양한 방법에 대해서 알아보겠습니다.
1. sort()를 이용한 방법
배열은 sort()
함수를 제공합니다.
- mutable 배열만 정렬 가능하니 배열은
mut
로 선언 필요 sort()
는 배열의 순서를 오름차순으로 변경 (원본 배열 변경)
fn main() {
let mut arr = [9, 3, 5, 4, 2];
arr.sort();
println!("{:?}", arr);
}
Output:
[2, 3, 4, 5, 9]
내림차순으로 정렬
내림차순으로 정렬하려면 오름차순으로 정렬된 배열에 reverse()
를 호출하여 순서를 반대로 변경하면 됩니다.
fn main() {
let mut arr = [9, 3, 5, 4, 2];
arr.sort();
arr.reverse();
println!("{:?}", arr);
}
Output:
[9, 5, 4, 3, 2]
2. sort_by()를 이용한 방법
배열의 sort_by()
는 정렬에 사용되는 Comparator를 직접 구현하여 원하는 기준으로 배열을 정렬을 할 수 있습니다.
- mutable 배열만 정렬 가능하니 배열은
mut
로 선언 필요 sort_by()
는 배열의 순서를 오름차순으로 변경 (원본 배열 변경)sort_by()
에 전달하는 Comparator 함수는 2개의 요소를 비교
아래 예제는 배열의 문자열들을 길이 순서로 오름차순 정렬합니다.
fn main() {
let mut arr = ["kiwi", "blueberry", "cherry", "melon", "elderberry"];
arr.sort_by(|a, b| a.len().cmp(&b.len()));
println!("{:?}", arr);
}
Output:
["kiwi", "melon", "cherry", "blueberry", "elderberry"]
내림차순 정렬
만약 내림차순 정렬하려면 reverse()
를 한번 더 호출하는 방법이 있지만,
아래와 같이 비교 구문을 오름차순과 반대로 구현하면 내림차순으로 정렬됩니다.
fn main() {
let mut arr = ["kiwi", "blueberry", "cherry", "melon", "elderberry"];
arr.sort_by(|a, b| b.len().cmp(&a.len()));
println!("{:?}", arr);
}
Output:
["elderberry", "blueberry", "cherry", "melon", "kiwi"]
3. sort_by_key()를 이용한 방법
배열의 sort_by_key()
함수는 요소들 중에 key를 선정하여, 이 key를 기준으로 오름차순 정렬합니다.
- mutable 배열만 정렬 가능하니 배열은
mut
로 선언 필요 sort_by_key()
는 배열의 순서를 오름차순으로 변경 (원본 배열 변경)sort_by_key()
에 전달하는 Comparator 함수는 1개 요소의 key를 리턴, 해당 key를 기준으로 정렬
아래 예제는 문자열의 길이를 key로, 문자열 배열을 오름차순 정렬하는 예제입니다.
fn main() {
let mut arr = ["kiwi", "blueberry", "cherry", "melon", "elderberry"];
arr.sort_by_key(|s| s.len());
println!("{:?}", arr);
}
Output:
["kiwi", "melon", "cherry", "blueberry", "elderberry"]
내림차순 정렬
만약 내림차순 정렬하려면 맨 처음에 소개한 것처럼 reverse()
를 한번 더 호출할 수 있습니다.
하지만, Comparator 함수에서 key에 대해 std::cmp::Reverse()
를 적용하면, 내림차순으로 정렬됩니다.
fn main() {
let mut arr = ["kiwi", "blueberry", "cherry", "melon", "elderberry"];
arr.sort_by_key(|s| std::cmp::Reverse(s.len()));
println!("{:?}", arr);
}
Output:
["elderberry", "blueberry", "cherry", "melon", "kiwi"]
Loading script...
Related Posts
- Rust - String을 char 리스트(Vector)로 변환
- Rust - 문자가 대문자인지 소문자인지 확인
- Rust - String에서 줄바꿈(newline) 문자 제거 방법
- Rust - String 대문자, 소문자 변환
- Rust - 현재 시간 가져오기 (DateTime, chrono)
- Rust - 예외 처리 방법 (Exception handling)
- Rust - String.find()으로 문자열 Index 찾기
- Rust - match (Switch) 사용 방법
- Rust - Vector의 요소 제거 방법 (remove, retain, drain)
- Rust - String의 특정 Index 값 가져오기
- Rust - 문자열 뒤집기, 역순으로 변경
- Rust - String 객체에 문자열 추가하기
- Rust - sleep(), 몇 초 지연/대기 방법
- Rust - String을 Int, Float으로 변환
- Rust - Integer를 String으로 변환
- Rust - Float를 String으로 변환
- Rust - String 비교 방법 (==, !=, eq, ne)
- Rust - String을 str으로, str을 String으로 변환
- Rust - String 공백 제거 (trim, replace)
- Rust - 2개의 배열이 같은지 비교 (==, equals)
- Rust - 배열 길이 가져오기 (Array length)
- Rust - Vector를 배열로 변환 (vector to array)
- Rust - 배열의 최소, 최대 값 찾기 (min, max)
- Rust - 배열의 합계, 평균 (sum, average)
- Rust - 2개의 Vector가 같은지 비교 (==, equals)
- Rust - HashMap을 Vector로 변환
- Rust - Vector의 최소, 최대 값 찾기 (min, max)
- Rust - Vector의 합계, 평균 (sum, average)
- Rust - 벡터 길이 가져오기 (Vector length)
- Rust - 배열을 HashSet으로 변환
- Rust - 배열을 벡터로 변환하는 방법
- Rust - 배열(벡터) 모든 요소 출력
- Rust - 배열 나누기, 자르기 (split_at, slice)
- Rust - 2개 벡터 하나로 합치기
- Rust - HashSet을 Vector로 변환