Rust - 배열 정렬 (sort, sort_by, sort_by_key)

러스트에서 배열을 정렬하는 다양한 방법에 대해서 알아보겠습니다.

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

codechachaCopyright ©2019 codechacha