# Task/Quest sắp xếp như thế nào

<figure><img src="https://802386008-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FspqnBzD0WwJ2ZkE3qcmX%2Fuploads%2Fzy3BfcUMU2BZkaWSCbN9%2Fimage.png?alt=media&#x26;token=73c43c2e-c111-4a65-afc5-0e50c852bf62" alt=""><figcaption></figcaption></figure>

* Ở tài liệu tích hợp GSM SDK cho Task Quest Log có mô tả:

<figure><img src="https://802386008-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FspqnBzD0WwJ2ZkE3qcmX%2Fuploads%2FZXGpu8BwWFEoPcBoMlBH%2Fimage.png?alt=media&#x26;token=e4e37ccf-c318-4580-9ba7-9ae9174c2d88" alt=""><figcaption></figcaption></figure>

* Hệ thống sẽ nhận dữ liệu từ game và sắp sếp theo ưu tiên sau:
  * Sắp sếp theo `taskPriority` theo từ thấp đến cao.
  * Nếu cùng 1 giá trị `taskPriority` thì sẽ sắp sếp taskName theo nguyên lý Alpha B.

Ví dụ:  Ta có bảng dữ liệu sau

| taskName | taskPriority |
| -------- | ------------ |
| 0\_1\_1  | 0            |
| 10\_1\_1 | 0            |
| 10\_1\_2 | 0            |
| 10\_1\_3 | 0            |
| 1\_3\_1  | 1            |
| 1\_3\_2  | 1            |
| 1\_3\_3  | 1            |

* Các task: `0_1_1, 10_1_1, 10_1_2, 10_1_3` cùng 1 taskPriority=0 nên được sắp sếp lên đầu.
* Mặc dù, `10_1_1` nhìn có vẻ lớn hơn `1_3_1`, nhưng do taskPriority được ưu tiên sắp sếp trước.
* Trong cùng 1 priority=0, thì sắp sếp theo kiểu so sánh chuỗi  như sau:

> Nguyên lý sắp xếp chuỗi trong lập trình thường dựa trên so sánh giữa các ký tự trong chuỗi, từ trái sang phải. Cụ thể, nó tuân theo quy tắc:
>
> 1. **So sánh từng ký tự:**
>    * Bắt đầu từ ký tự đầu tiên của mỗi chuỗi, so sánh giá trị ASCII hoặc Unicode của chúng.
>    * Nếu ký tự tại vị trí hiện tại của chuỗi thứ nhất lớn hơn ký tự tương ứng của chuỗi thứ hai, thì chuỗi thứ nhất đứng trước trong thứ tự sắp xếp.
>    * Nếu ký tự tại vị trí hiện tại của chuỗi thứ nhất nhỏ hơn ký tự tương ứng của chuỗi thứ hai, thì chuỗi thứ nhất đứng sau trong thứ tự sắp xếp.
>    * Nếu ký tự bằng nhau, di chuyển đến ký tự tiếp theo và lặp lại quy trình so sánh.
> 2. **Khi gặp ký tự khác nhau:**
>    * Nếu một trong hai chuỗi kết thúc, chuỗi kết thúc sớm hơn sẽ đứng trước trong thứ tự sắp xếp.
>    * Nếu cả hai chuỗi đều kết thúc, chúng được coi là bằng nhau.
> 3. **Áp dụng lặp lại cho tất cả các ký tự:**
>    * Quy trình trên được lặp lại cho tất cả các ký tự trong chuỗi.
>
> Ví dụ:
>
> * "abc" đứng trước "def" vì 'a' < 'd'.
> * "apple" đứng trước "banana" vì 'a' < 'b'.
> * "abc" đứng trước "abcd" vì "abc" là một phần của "abcd".
>
> Nguyên lý này thường được áp dụng trong các thuật toán sắp xếp như Bubble Sort, Insertion Sort, Selection Sort, và cả trong các hàm sắp xếp của nhiều ngôn ngữ lập trình.

## Gợi ý cách đặt task name

* Nên đặt taskname kiểu: \[Thứ tự]_TaskName.  Ví dụ: 0001\_task1, 0002\_task2 ..._
