Line Sorter

按字母、长度、倒序或随机顺序对文本行进行排序

加载示例

输入行

排序结果

本地运行 · 粘贴密钥安全无忧
排序结果将显示在此处…

什么是行排序?

行排序是根据特定规则对文本块中的行重新排列的过程,规则包括:字母顺序、倒序、行长度或随机打乱。在处理日志文件、CSV 数据、配置列表或任何顺序有意义的纯文本内容时,在线行排序是一项常见操作。该操作将文本按换行符拆分,对得到的数组应用比较函数,然后将排序后的行重新合并。

大多数编程语言默认使用字典序比较对字符串排序,即按 Unicode 码位比较字符。这意味着大写字母排在小写字母之前("Banana" 排在 "apple" 之前),数字排在字母之前。有时称为自然排序或排序规则的区域感知排序通过应用特定语言的规则来修正这一问题。JavaScript 的 localeCompare()、Python 的 locale.strxfrm() 以及带 LC_COLLATE 的 POSIX sort 命令均提供区域感知排序。

按长度排序适用于需要找出列表中最短或最长条目、识别日志输出中的异常值,或按复杂度组织条目的场景。倒序排序是对现有行顺序进行翻转,而非重新排列,这与 Z-A 字母排序不同。随机打乱为每一行分配一个随机排序键,每次运行都会产生不同的顺序。在同一输入上切换排序模式,比临时编写脚本更高效。

为什么使用这个行排序工具?

粘贴文本,选择排序模式,立即获得结果。无需命令行配置、脚本文件或包安装。

即时排序
输入或粘贴时结果即时呈现。在六种排序模式之间切换并比较输出,无需重新运行任何操作。
🔒
隐私优先处理
所有排序均在浏览器中通过 JavaScript 运行。您的文本保留在本地设备上,不会上传到服务器或被记录。
🔀
六种排序模式
A-Z、Z-A、最短优先、最长优先、倒序和随机打乱。一个输入涵盖最常见的行排序需求。
📋
无需账号
打开页面即可开始排序。无需注册、无需扩展、无需桌面应用。支持任何搭载现代浏览器的设备。

行排序工具使用场景

前端开发
按字母顺序排序 CSS 类名列表、import 语句或 i18n 翻译键。统一的顺序可减少版本控制中的合并冲突,并加快代码审查速度。
后端工程
在提交前对 package.json、requirements.txt 或 go.mod 中的依赖列表进行排序。构建 CREATE TABLE 语句或比较 schema 差异时,对 SQL 列名进行排序。
DevOps 与基础设施
对 .env 文件中的环境变量名、Kubernetes ConfigMap 条目或 Terraform 变量块进行排序。字母顺序便于在审查时发现重复项和缺失值。
QA 与测试自动化
按时间戳或消息对测试输出日志排序,以快速定位失败。对测试输入数据进行随机打乱,验证应用行为不依赖于插入顺序。
数据工程
在编写 schema 迁移脚本前,对 CSV 头部或列名列表进行排序。按长度对数据样本行排序,以找出数据流水线中被截断的行或异常长的值。
学生与学习者
按字母顺序排序词汇表、参考文献条目或学习笔记。对闪卡行进行随机打乱,实现随机复习,无需安装额外应用。

行排序模式参考

本工具支持六种排序模式。下表描述了每种模式、所用的比较方法,以及对输入列表(apple、banana、cherry、date、fig)的示例输出。

模式说明JS 方法示例输出
A-ZAlphabetical ascendinglocaleCompare()apple, banana, cherry
Z-AAlphabetical descendinglocaleCompare() reversedcherry, banana, apple
Length (short)Shortest line firsta.length - b.lengthfig, date, apple, banana
Length (long)Longest line firstb.length - a.lengthbanana, apple, date, fig
ReverseFlip line order, no reorderingArray.reverse()Last line becomes first
RandomRandomized comparator (biased)Math.random() - 0.5Different every run

幕后的排序算法

在 JavaScript 中调用 Array.sort() 时,V8 引擎(Chrome、Node.js)自 2019 年起使用 Timsort。其他运行时使用不同的算法。下表比较了各语言标准库中最常用的排序算法。对于本工具的行排序工作负载,所有算法在典型输入(10 万行以内)下均可在 1 毫秒内完成。

算法使用方时间复杂度备注
TimsortPython, Java (Arrays.sort)O(n log n)Stable, fast on partially sorted data
QuicksortC stdlib, V8 (older)O(n log n)In-place, unstable by default
Merge sortMost stable-sort implementationsO(n log n)Stable, predictable, uses extra memory
IntrosortC++ std::sort, .NETO(n log n)Hybrid: quicksort + heapsort fallback
Radix sortFixed-length keys, integersO(nk)Non-comparative, linear for short keys

代码示例

在 JavaScript、Python、Go 和命令行中以编程方式对行进行排序。每个示例涵盖字母排序、按长度排序和倒序排序。

JavaScript
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')
Python
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
Go
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
}
CLI (bash)
# 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

常见问题

A-Z 排序与自然排序有什么区别?
A-Z 排序(字典序)按 Unicode 码位比较字符。这意味着 "item10" 排在 "item2" 之前,因为字符 '1' 的码位低于 '2'。自然排序将嵌入的数字视为数值,因此 "item2" 排在 "item10" 之前。本工具通过 localeCompare() 使用区域感知字典序排序,可正确处理重音字符,但不对数字执行自然排序。
排序时我的文本会发送到服务器吗?
不会。所有排序均在浏览器中使用 JavaScript 的 Array.sort() 方法完成。文本不会离开您的设备。您可以在浏览器 DevTools 的网络标签中验证这一点,确认粘贴并排序文本时没有发出任何请求。
本工具能处理多少行?
本工具可以处理数万行。V8 中的 Timsort 实现可在现代硬件上于 100 毫秒内处理 10 万行。对于几兆字节以上的文件,Unix sort 命令等命令行工具更高效,因为它可以使用基于磁盘的归并排序和多线程。
大小写不敏感排序是如何工作的?
本工具使用带 { sensitivity: 'base' } 选项的 String.localeCompare(),使比较不区分大小写,从而让 "Apple" 和 "apple" 排列在一起,而不是分成不同的组。默认情况下,localeCompare() 区分大小写;需要显式设置该选项才能实现大小写不敏感的行为。如果需要严格区分大小写、大写字母优先的排序,不带 -f 标志的 Unix sort 命令可实现该行为。
能否同时排序行并去除重复项?
本工具只排序行,不去除重复项。要去除重复行,请使用同一类别下的"重复行删除器"工具。您可以先在此处排序文本,然后将结果粘贴到重复行删除器中,得到干净、唯一且有序的列表。
倒序排序与 Z-A 排序有什么区别?
倒序排序翻转原始行顺序:最后一行变为第一行,倒数第二行变为第二行,以此类推,不涉及字母比较。Z-A 排序无论原始位置如何,都按降序字母顺序排列行。如果输入已按 A-Z 排序,两者结果相同,但对于无序输入,结果会有所不同。
如何按特定列或字段排序行?
本工具按整行内容排序。要按特定列排序(例如制表符分隔文件中的第二个字段),请使用带 -k 标志的 Unix sort 命令:sort -t$'\t' -k2,2 file.txt。在 Python 中,可拆分每一行并使用键函数:sorted(lines, key=lambda x: x.split('\t')[1])。