기술.이산이다

natsort

이산이다 2025. 12. 8. 05:19

1. PHP natsort 함수 설명

natsort()는 배열을 자연 정렬(Natural Order Sorting) 방식으로 정렬하는 함수입니다.
자연 정렬은 문자열 안에 포함된 숫자를 일반 문자 비교가 아닌 사람이 인지하는 숫자 크기 기준으로 정렬합니다.

예: "file2" < "file10"
일반 정렬(sort)이라면 "file10"이 "file2"보다 앞서지만, 자연 정렬은 숫자를 비교해 올바른 순서로 배치합니다.

  • 정렬은 값(value) 기준이며, 키(key) 유지(Associative array keys 유지)
  • ASCII 순서 정렬이 아닌 사람 친화적 정렬

2. PHP natsort 샘플 코드

 
<?php
$files = ["file10.txt", "file2.txt", "file1.txt", "file20.txt"];
natsort($files);

print_r($files);
?>

3. 샘플코드 사용 방법 및 Output

● 사용 방법

  1. 정렬할 문자열 배열을 준비한다.
  2. natsort() 함수를 호출하면 배열이 자연 정렬 방식으로 정렬된다.
  3. 키(index)는 유지된다.
  4. 출력하면 자연스러운 사람 중심의 정렬이 된다.

● 예상 Output

 
Array ( [2] => file1.txt [1] => file2.txt [0] => file10.txt [3] => file20.txt )

4. VB.NET 유사 기능 — Array.Sort + StrCmpLogicalW 사용

VB.NET에는 PHP natsort와 동일한 자연 정렬 내장 함수가 없지만
Windows API 함수 StrCmpLogicalW 를 사용하면 자연 정렬 효과를 얻을 수 있습니다.


✔ 설명

StrCmpLogicalW는 Windows Explorer에서 사용하는 자연 정렬 방식으로 문자열을 비교합니다.


✔ VB.NET 샘플 코드

 
Imports System.Runtime.InteropServices

Module Module1

    <DllImport("shlwapi.dll", CharSet:=CharSet.Unicode)>
    Private Function StrCmpLogicalW(x As String, y As String) As Integer
    End Function

    Sub Main()
        Dim files = {"file10.txt", "file2.txt", "file1.txt", "file20.txt"}

        Array.Sort(files, Function(a, b) StrCmpLogicalW(a, b))

        For Each f In files
            Console.WriteLine(f)
        Next
    End Sub

End Module

✔ Output

 
file1.txt file2.txt file10.txt file20.txt

5. C# 유사 기능 — 자연 정렬용 StrCmpLogicalW 사용


✔ 설명

C# 역시 기본적으로 자연 정렬이 없어 Windows API 호출을 통해 자연 정렬을 구현합니다.


✔ C# 샘플 코드

 
using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    private static extern int StrCmpLogicalW(string x, string y);

    static void Main()
    {
        string[] files = { "file10.txt", "file2.txt", "file1.txt", "file20.txt" };

        Array.Sort(files, (a, b) => StrCmpLogicalW(a, b));

        foreach (var f in files)
            Console.WriteLine(f);
    }
}

✔ Output

 
file1.txt file2.txt file10.txt file20.txt

6. Python 유사 기능 — natsort 라이브러리 사용

Python은 기본 내장 함수만으로 자연 정렬이 어렵기 때문에
전용 라이브러리 natsort 를 주로 사용합니다.


✔ 설명

natsorted() 함수는 문자열에 포함된 숫자를 자동으로 감지해 자연 정렬을 수행합니다.


✔ Python 샘플 코드

 
from natsort import natsorted

files = ["file10.txt", "file2.txt", "file1.txt", "file20.txt"]

result = natsorted(files)

print(result)

✔ Output

 
['file1.txt', 'file2.txt', 'file10.txt', 'file20.txt']

7. JavaScript 유사 기능 — localeCompare + numeric: true 사용

JavaScript는 localeCompare에 numeric: true 옵션을 적용하면 자연 정렬이 가능합니다.


✔ 설명

localeCompare는 문자열 비교 시 숫자를 자연스럽게 비교하도록 지원합니다.


✔ JavaScript 샘플 코드

 
let files = ["file10.txt", "file2.txt", "file1.txt", "file20.txt"];

files.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));

console.log(files);

✔ Output

 
["file1.txt", "file2.txt", "file10.txt", "file20.txt"]