ตัวเรียงบรรทัด
เรียงบรรทัดตามตัวอักษร ตามความยาว ย้อนกลับ หรือสุ่มลำดับบรรทัด
บรรทัดอินพุต
บรรทัดที่เรียงแล้ว
การเรียงบรรทัดคืออะไร?
การเรียงบรรทัดคือกระบวนการจัดเรียงบรรทัดในกลุ่มข้อความใหม่ตามกฎที่กำหนด ได้แก่ ลำดับตัวอักษร ลำดับย้อนกลับ ความยาวบรรทัด หรือการสุ่ม การเรียงบรรทัดออนไลน์เป็นงานที่พบบ่อยเมื่อทำงานกับไฟล์ log, ข้อมูล CSV, รายการการกำหนดค่า หรือเนื้อหาข้อความธรรมดาที่ลำดับมีความสำคัญ การดำเนินการนี้แบ่งข้อความที่อักขระขึ้นบรรทัดใหม่ ใช้ฟังก์ชันเปรียบเทียบกับอาร์เรย์ที่ได้ แล้วรวมบรรทัดที่เรียงแล้วกลับเข้าด้วยกัน
ภาษาโปรแกรมส่วนใหญ่เรียงสตริงโดยใช้การเปรียบเทียบแบบ lexicographic ตามค่า Unicode code point ซึ่งหมายความว่าตัวพิมพ์ใหญ่จะเรียงก่อนตัวพิมพ์เล็ก ("Banana" ก่อน "apple") และตัวเลขจะเรียงก่อนตัวอักษร การเรียงแบบ locale-aware ซึ่งบางครั้งเรียกว่า natural sort หรือ collation แก้ปัญหานี้โดยใช้กฎเฉพาะของแต่ละภาษา ฟังก์ชัน localeCompare() ใน JavaScript, locale.strxfrm() ใน Python และคำสั่ง sort ของ POSIX พร้อม LC_COLLATE ต่างก็รองรับการเรียงแบบ locale-aware
การเรียงตามความยาวมีประโยชน์เมื่อต้องการหารายการที่สั้นหรือยาวที่สุดในรายการ ระบุค่าผิดปกติในผลลัพธ์ log หรือจัดระเบียบรายการตามความซับซ้อน การเรียงย้อนกลับจะพลิกลำดับบรรทัดที่มีอยู่โดยไม่ต้องจัดเรียงใหม่ ซึ่งแตกต่างจากการเรียงตัวอักษรแบบ Z-A การสุ่มจะกำหนดคีย์การเรียงแบบสุ่มให้แต่ละบรรทัด ทำให้ได้ลำดับที่แตกต่างกันในทุกครั้ง การสลับระหว่างโหมดต่างๆ บนข้อมูลเดิมเร็วกว่าการเขียนสคริปต์เฉพาะครั้ง
ทำไมต้องใช้ตัวเรียงบรรทัดนี้?
วางข้อความของคุณ เลือกโหมดการเรียง แล้วรับผลลัพธ์ทันที ไม่ต้องตั้งค่า command line ไม่ต้องเขียนสคริปต์ ไม่ต้องติดตั้งแพ็คเกจ
กรณีการใช้งานตัวเรียงบรรทัด
คู่มืออ้างอิงโหมดการเรียงบรรทัด
เครื่องมือนี้รองรับ 6 โหมดการเรียง ตารางด้านล่างอธิบายแต่ละโหมด วิธีการเปรียบเทียบที่ใช้ และตัวอย่างผลลัพธ์สำหรับรายการอินพุต: apple, banana, cherry, date, fig
| โหมด | คำอธิบาย | วิธีการใน JS | ตัวอย่างผลลัพธ์ |
|---|---|---|---|
| A-Z | Alphabetical ascending | localeCompare() | apple, banana, cherry |
| Z-A | Alphabetical descending | localeCompare() reversed | cherry, banana, apple |
| Length (short) | Shortest line first | a.length - b.length | fig, date, apple, banana |
| Length (long) | Longest line first | b.length - a.length | banana, apple, date, fig |
| Reverse | Flip line order, no reordering | Array.reverse() | Last line becomes first |
| Random | Randomized comparator (biased) | Math.random() - 0.5 | Different every run |
อัลกอริทึมการเรียงที่อยู่เบื้องหลัง
เมื่อคุณเรียก Array.sort() ใน JavaScript เอนจิน V8 (Chrome, Node.js) ใช้ Timsort ตั้งแต่ปี 2019 runtime อื่นๆ ใช้อัลกอริทึมที่แตกต่างกัน ตารางด้านล่างเปรียบเทียบอัลกอริทึมการเรียงที่พบบ่อยที่สุดที่ใช้ใน standard library ของภาษาต่างๆ ทุกอัลกอริทึมจัดการงานการเรียงบรรทัดในเครื่องมือนี้ได้ในเวลาต่ำกว่าหนึ่งมิลลิวินาทีสำหรับอินพุตทั่วไป (ต่ำกว่า 100,000 บรรทัด)
| อัลกอริทึม | ใช้โดย | ความซับซ้อน | หมายเหตุ |
|---|---|---|---|
| Timsort | Python, Java (Arrays.sort) | O(n log n) | Stable, fast on partially sorted data |
| Quicksort | C stdlib, V8 (older) | O(n log n) | In-place, unstable by default |
| Merge sort | Most stable-sort implementations | O(n log n) | Stable, predictable, uses extra memory |
| Introsort | C++ std::sort, .NET | O(n log n) | Hybrid: quicksort + heapsort fallback |
| Radix sort | Fixed-length keys, integers | O(nk) | Non-comparative, linear for short keys |
ตัวอย่างโค้ด
เรียงบรรทัดด้วยโค้ดใน JavaScript, Python, Go และ command line แต่ละตัวอย่างครอบคลุมการเรียงตามตัวอักษร ตามความยาว และการย้อนกลับ
const text = `banana
apple
cherry
date
fig`
// Sort A-Z (locale-aware)
const az = text.split('\n').sort((a, b) => a.localeCompare(b)).join('\n')
// → "apple\nbanana\ncherry\ndate\nfig"
// Sort by line length, shortest first
const byLen = text.split('\n').sort((a, b) => a.length - b.length).join('\n')
// → "fig\ndate\napple\nbanana\ncherry"
// Reverse line order (no alphabetical sorting)
const reversed = text.split('\n').reverse().join('\n')
// → "fig\ndate\ncherry\napple\nbanana"
// Remove duplicates and sort
const unique = [...new Set(text.split('\n'))].sort().join('\n')text = """banana apple cherry date fig""" lines = text.splitlines() # Sort A-Z (case-insensitive) az = sorted(lines, key=str.lower) # → ['apple', 'banana', 'cherry', 'date', 'fig'] # Sort by line length by_len = sorted(lines, key=len) # → ['fig', 'date', 'apple', 'banana', 'cherry'] # Reverse original order rev = lines[::-1] # → ['fig', 'date', 'cherry', 'apple', 'banana'] # Shuffle randomly import random random.shuffle(lines) # modifies in place
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
text := "banana\napple\ncherry\ndate\nfig"
lines := strings.Split(text, "\n")
// Sort A-Z
sort.Strings(lines)
fmt.Println(strings.Join(lines, "\n"))
// → apple\nbanana\ncherry\ndate\nfig
// Sort by length
sort.Slice(lines, func(i, j int) bool {
return len(lines[i]) < len(lines[j])
})
fmt.Println(strings.Join(lines, "\n"))
// → fig\ndate\napple\nbanana\ncherry
}# Sort lines A-Z
sort file.txt
# Sort lines Z-A (reverse)
sort -r file.txt
# Sort numerically (first field)
sort -n data.txt
# Sort by line length (awk + sort + cut)
awk '{ print length, $0 }' file.txt | sort -n | cut -d' ' -f2-
# Shuffle lines randomly
shuf file.txt # GNU coreutils
sort -R file.txt # alternative (not truly uniform)
# Sort and remove duplicates
sort -u file.txt