# 정렬

## Content

간트 시트는 프로젝트 전반에 걸쳐 작업을 효율적으로 정리할 수 있도록 정렬 기능을 제공합니다. [GC.Spread.Sheets.GanttSheet.Project](/spreadjs/api/v19/classes/GC.Spread.Sheets.GanttSheet.Project#sort) 클래스의 `sort` 메서드를 사용하여 데이터를 정렬할 수 있습니다.
SpreadJS는 간트 시트 데이터를 다양한 방식으로 정렬하고 순서를 지정할 수 있도록 지원합니다. 이러한 정렬 옵션을 사용하면 프로젝트의 특정 요구에 따라 간트 시트에 표시되는 작업을 조정할 수 있습니다.

## 오름차순 정렬

작업 또는 리소스를 가장 낮은 값에서 가장 높은 값으로 정렬합니다 (A → Z, 1, 2, 3 …).
다음 코드 샘플은 `taskNumber` 필드를 오름차순으로 정렬하는 방법을 보여줍니다.

```auto
// taskNumber 필드를 오름차순 정렬
ganttSheet.project.sort(["taskNumber"], [true]);    
```

## 내림차순 정렬

작업 또는 리소스를 가장 높은 값에서 가장 낮은 값으로 정렬합니다 (Z → A, … 3, 2, 1).
다음 코드 샘플은 `taskNumber` 필드를 내림차순으로 정렬하는 방법을 보여줍니다.

```auto
// taskNumber 필드를 내림차순 정렬
ganttSheet.project.sort(["taskNumber"], [false]);
```

## 개요 구조 유지

간트 시트는 원래의 작업 트리 구조를 유지하면서 작업을 정렬할 수 있습니다. 이 경우 하위 작업과 상위 작업 간의 관계가 유지되며, 하위 작업은 여전히 해당 상위 작업에 연결된 상태로 유지됩니다. 개요 구조를 유지하지 않고 정렬하는 것도 가능합니다.
다음 코드 샘플은 `taskNumber` 필드를 내림차순으로 정렬하되, 구조는 유지하지 않는 경우를 보여줍니다.

```auto
// taskNumber 필드를 내림차순 정렬, 구조는 유지하지 않음
ganttSheet.project.sort(["taskNumber"], [false], false);
```

SpreadJS는 [플랫(flat) 정렬](https://demo.mescius.co.kr/spreadjs/learn-spreadjs/features/worksheet/sort/purejs)도 지원하지만, 이는 간트 시트의 원래 작업 트리 구조를 무너뜨립니다. 또한 그룹 데이터도 무시됩니다.
간트 시트가 플랫 정렬된 후에는 다음과 같은 작업이 제한됩니다:

* 루트 노드는 정렬에 포함되지 않음
* 개요 구조를 유지하지 않고 정렬하는 경우, 프로젝트는 임시 상태가 됨. 따라서:
    * 접기/펼치기 동작이 금지됨
    * 들여쓰기/내어쓰기 불가
    * 작업 번호 재지정 불가

## 작업 번호 영구 재지정

간트 시트 정렬은 일시적이거나 영구적일 수 있습니다. 영구 정렬 시, 새로운 순서에 따라 작업 ID 번호가 재지정됩니다.
정렬 상태를 데이터베이스에 반영하려면 모든 작업을 재번호화할 수 있습니다. 작업 번호를 재지정하려면 **개요 구조 유지** 옵션이 활성화되어 있어야 합니다.
다음 코드 샘플은 `taskNumber` 필드를 내림차순으로 정렬하되, 구조를 유지하지 않고 새로운 정렬 순서에 따라 작업 번호를 재지정하는 예를 보여줍니다.

```auto
// taskNumber 필드를 내림차순 정렬, 구조를 유지하지 않으며 작업 번호를 재지정
ganttSheet.project.sort(["taskNumber"], [false], true, true);
```

아래 GIF는 다양한 정렬 동작을 보여줍니다.
![image](https://cdn.mescius.io/document-site-files/images/ef9b66d1-0ae2-4e94-b8cb-f9f893aacc8d/GS-Sorting.17038c.gif?width=852)