개발.이산이다
natcasesort
이산이다
2025. 12. 14. 01:10
✅ 1. PHP natcasesort() 함수 설명
natcasesort() 함수는 배열을 대소문자를 구분하지 않는 자연 정렬(Natural Order Sort) 방식으로 정렬하는 함수입니다.
자연 정렬은 문자열 안의 숫자를 실제 숫자 값으로 판단하여 사람이 보기에 자연스러운 순서로 정렬합니다.
예)
일반 정렬: file1, file10, file2 → file1, file10, file2
자연 정렬: file1, file2, file10
- 키(key)는 유지되지만 재정렬됨
- 값(value) 기준으로 정렬
- 대소문자 구분 없음 (natsort()은 대소문자 구분)
✅ 2. PHP natcasesort() 샘플 코드
<?php
$files = ["file10.txt", "File2.txt", "file1.txt"];
natcasesort($files);
print_r($files);
?>
✅ 3. 샘플코드 설명 및 Output
✔ 실행방법
- PHP 파일 생성 (test.php)
- 위 코드 삽입 후 실행
✔ 동작 설명
- 문자열 안의 숫자를 숫자로 판단하는 자연 정렬
- File2 와 file2 는 동일하게 처리 (대소문자 구분 없음)
✔ 결과 Output
Array ( [2] => file1.txt [1] => File2.txt [0] => file10.txt )
※ 배열 키는 원래 키를 유지한 채 정렬됩니다.
✅ 4. VB.NET 유사 기능 – 자연 정렬(대소문자 구분 없음)
VB.NET에는 기본 제공되는 자연 정렬 함수는 없지만,
Windows API 의 StrCmpLogicalW 를 사용하면 PHP natcasesort()와 거의 동일한 기능을 구현할 수 있습니다.
✔ VB.NET 함수 설명
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 = New List(Of String) From {"file10.txt", "File2.txt", "file1.txt"}
files.Sort(Function(a, b) StrCmpLogicalW(a, b))
For Each f In files
Console.WriteLine(f)
Next
End Sub
End Module
✔ VB.NET Output
file1.txt File2.txt file10.txt
✅ 5. C# 유사 기능 – 자연 정렬(대소문자 구분 없음)
C#에서도 동일하게 StrCmpLogicalW API를 사용합니다.
✔ C# 함수 설명
대소문자 무시하며 숫자를 실제 숫자로 비교하는 자연 정렬을 제공.
✔ C# 샘플 코드
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
class Program
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string x, string y);
static void Main()
{
List<string> files = new List<string> { "file10.txt", "File2.txt", "file1.txt" };
files.Sort((a, b) => StrCmpLogicalW(a, b));
foreach (var f in files)
Console.WriteLine(f);
}
}
✔ C# Output
file1.txt File2.txt file10.txt
✅ 6. Python 유사 기능 – 자연 정렬 (대소문자 구분 없음)
Python에는 natcasesort()와 유사한 기능을 제공하는 내장함수는 없지만
natsort 외부 라이브러리를 사용하면 동일 기능을 구현할 수 있습니다.
또는 간단한 key 함수로 직접 구현할 수 있습니다.
✔ Python 함수 설명
- 문자열을 숫자와 문자로 분해하여 자연 정렬
- 대소문자 구분 없이 정렬
✔ Python 샘플 코드 (외부 라이브러리 없이)
import re
def natural_key(value):
return [int(text) if text.isdigit() else text.lower()
for text in re.split(r'(\d+)', value)]
files = ["file10.txt", "File2.txt", "file1.txt"]
files.sort(key=natural_key)
print(files)
✔ Python Output
['file1.txt', 'File2.txt', 'file10.txt']
✅ 7. JavaScript 유사 기능 – 자연 정렬 (대소문자 구분 없음)
JavaScript에서는 Intl.Collator 객체를 통해 자연 정렬을 구현할 수 있습니다.
✔ JavaScript 함수 설명
- numeric: true 옵션 → 자연 정렬
- sensitivity: 'base' → 대소문자 구분 없음
✔ JavaScript 샘플 코드
const files = ["file10.txt", "File2.txt", "file1.txt"];
files.sort(
new Intl.Collator('en', { numeric: true, sensitivity: 'base' }).compare
);
console.log(files);
✔ JavaScript Output
[ 'file1.txt', 'File2.txt', 'file10.txt' ]
🎉 정리
언어대소문자 구분 없음자연 정렬 지원
| PHP (natcasesort) | ✔ 기본 제공 | ✔ 기본 제공 |
| VB.NET | ✔ API 이용 | ✔ StrCmpLogicalW |
| C# | ✔ API 이용 | ✔ StrCmpLogicalW |
| Python | ✔ 가능 | ✔ 직접 구현 또는 natsort |
| JavaScript | ✔ ✔ | ✔ Intl.Collator |