参赛名单排序
学校运动会前,体育老师收到各班级提交的 200 人参赛名单,姓名顺序混乱。按拼音字典序排序后,打印出来的检录表与广播顺序一致,现场叫号不再跳人漏人,节省了 20 分钟人工核对时间。本工具支持一次性处理整段文本,无需逐行复制粘贴。
把一列姓名按拼音首字母排成 A→Z,或把混着数字和文字的版本号按数值大小排序——手动拖拽几行还行,上百行就变成反复粘贴的苦力活。这个工具接受任意文本行,选字典序、数字序、长度序或随机打乱,一次出结果。所有排序在浏览器内完成,文本不会离开本地。
学校运动会前,体育老师收到各班级提交的 200 人参赛名单,姓名顺序混乱。按拼音字典序排序后,打印出来的检录表与广播顺序一致,现场叫号不再跳人漏人,节省了 20 分钟人工核对时间。本工具支持一次性处理整段文本,无需逐行复制粘贴。
财务月底对账,手上有 50 张发票号段(如 20241001-20241050),但系统导出的流水号是乱序的。用数字序排序后,缺失的号码(如 20241023 跳号)立即显现,比肉眼扫表快 5 倍,且不会漏掉中间断号。本工具对纯数字行自动识别为数值排序,无需手动提取前缀。
研究生写完论文初稿,参考文献 80 条按出现顺序排列,但导师要求改为按作者姓氏字母序。用字典序排序,将每条文献单独一行,排序后自动对齐标准格式,避免手动调整时打乱编号顺序。本工具不改变原文内容,只重排行序,适合保留原始标注。
年会前,HR 准备了 300 名员工名单,但抽奖程序临时故障。用本工具的随机排序功能,将名单打乱后直接作为抽奖顺序,每次刷新结果不同,确保公平性。本工具基于浏览器端随机算法,不联网传输数据,适合现场临时使用。
电商运营需要将 100 个商品标题按字符长度排序,以便快速找出超长标题(超过 30 字会被平台截断)。用长度序排序后,最长的标题排在最前,逐一修改即可。本工具以字符数(含空格)为排序依据,与主流电商平台截断规则一致。
| 维度 | 本工具 | 在线排序站 | 手工/脚本方式 |
|---|---|---|---|
| 隐私 | 文本完全在浏览器处理,不上传服务器 | 需将文本粘贴或上传至对方服务器 | 本地操作,不涉及网络传输 |
| 速度 | 即时处理,无网络延迟 | 受网络速度和服务器负载影响 | 纯手动逐行排序,耗时随行数增加 |
| 离线可用 | 完全离线,浏览器内运行 | 必须联网 | 完全离线 |
| 排序方式 | 字典序/数字序/长度序/随机,一键切换 | 多数仅提供字典序和数字序 | 需手动编写公式或脚本实现不同排序 |
| 大小限制 | 受浏览器内存限制,通常数万行无压力 | 多数有行数或字符数上限(如 5000 行) | 理论上无限制,受文本编辑器或脚本性能影响 |
| 注册收费 | 免费,无需注册 | 部分网站高级排序需付费或登录 | 无成本,但需具备脚本编写能力 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 苹果 香蕉 橙子 苹果 葡萄 | 橙子 苹果 苹果 葡萄 香蕉 | 常规:字典序升序,展示中文按拼音排序,重复项(苹果)保留并相邻排列 |
| 12 3 105 7 22 | 3 7 12 22 105 | 常规:数字序升序,验证纯数字行正确按数值而非字典序排序(105 排在 22 之后) |
| abc a abcd ab abcde | a ab abc abcd abcde | 常规:长度序升序,验证短字符串在前,等长时保持原顺序(稳定排序) |
| 单行内容 | 单行内容 | 边界:只有一行输入,排序后输出不变,验证工具不因无多行而报错或崩溃 |
| 空格开头 无空格 两个空格开头 | 两个空格开头 空格开头 无空格 | 边界:字典序时空格 ASCII 码小于字母,带空格的字符串排在前面,验证空白字符处理 |
| 行1 行3 行5 | 行1 行3 行5 | 边界:输入含空行,字典序时空行视为空字符串排在最后,验证空行不被忽略 |
| 123 abc 12 AB 1234 | 123 12 1234 AB abc | 易错:字典序下数字字符 ASCII 小于大写字母小于小写字母,所以 123 排在 AB 前,AB 排在 abc 前,容易误以为按字母顺序 |
| 1.5 1.10 1.2 | 1.10 1.2 1.5 | 易错:字典序按字符逐位比较,1.10 的第三位 '1' 小于 1.2 的第三位 '2',所以 1.10 排在 1.2 前,与数值大小直觉相反 |
1.数字序排序时混入非数字行
输入:
第1行: 12
第2行: abc
第3行: 5输入:
12
5
(移除所有非数字行)数字序(数值排序)只处理可解析为数字的行。混入字母或符号会导致该行被当作0或NaN,排序结果不符合预期。
2.字典序排序时忽略大小写差异
输入:
Apple
apple
Banana输入:
apple
Apple
Banana字典序默认按ASCII/Unicode码点排序,大写字母(A=65)排在小写字母(a=97)之前。若需要忽略大小写,应先在工具外统一大小写。
3.长度序排序时误把空格计入长度
输入:
"abc"
"abcd"输入:
abc
abcd长度序按字符数排序,包括空格、制表符等空白字符。首尾空格会被计入长度,导致长度值偏离实际可见内容长度。
4.随机排序后误以为结果是可复现的
每次点击随机排序,期望得到相同顺序若需可复现随机,应手动记录当前随机结果,或使用固定种子(本工具无种子功能)随机排序每次独立运行,使用系统熵源生成新序列。无种子参数时,结果不可预测也不可复现。
5.字典序排序时误以为数字按数值排序
输入:
10
2
1输入:
1
10
2字典序将每个字符独立比较,'1'<'2',所以'10'排在'2'之前。若需要数值排序,应选择工具的数字序模式。
6.长度序排序时误以为中文按字数排序
输入:
你好
你好吗输入:
你好
你好吗(长度2 vs 3,正确)长度序按字符数(Unicode码点)排序,中文字符每个占1个长度单位。但若混入emoji或组合字符(如é),长度可能不等于视觉字数。
7.在字典序中误以为空行会被忽略
输入:
apple
banana输入:
apple
banana(移除空行后再排序)空行(长度为0的字符串)在字典序中会被视为有效行,排序后可能出现在开头或中间,干扰结果顺序。
字典序比较:按字符 Unicode 码点逐位比较;数字序:提取数字前缀后按数值比较;长度序:按字符数升序;随机序:Fisher-Yates 洗牌算法
a, b待比较的两个字符串n待排序元素总数iFisher-Yates 当前索引输入列表 ["a10", "a2", "b1"] 按数字序排序:提取数字前缀得 [10, 2, 1],排序后为 [1, 2, 10],对应原字符串顺序为 ["b1", "a2", "a10"]。
4 种主流语言实现,复制即用:
import random
lines = ["banana", "apple", "Cherry", "123", "apple"]
# 字典序(区分大小写,大写字母 < 小写字母)
sorted_lex = sorted(lines)
print("字典序:", sorted_lex)
# 数字序(仅保留纯数字行,按数值排序)
numeric_lines = [l for l in lines if l.isdigit()]
sorted_num = sorted(numeric_lines, key=int)
print("数字序:", sorted_num)
# 长度序
sorted_len = sorted(lines, key=len)
print("长度序:", sorted_len)
# 随机打乱
random.shuffle(lines)
print("随机:", lines)const lines = ['banana', 'apple', 'Cherry', '123', 'apple'];
// 字典序(默认 Unicode 码点,大写字母在前)
const sortedLex = [...lines].sort();
console.log('字典序:', sortedLex);
// 数字序(过滤出纯数字行)
const numericLines = lines.filter(l => /^\d+$/.test(l));
const sortedNum = numericLines.sort((a, b) => Number(a) - Number(b));
console.log('数字序:', sortedNum);
// 长度序
const sortedLen = [...lines].sort((a, b) => a.length - b.length);
console.log('长度序:', sortedLen);
// 随机打乱
const shuffled = [...lines];
for (let i = shuffled.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
}
console.log('随机:', shuffled);package main
import (
"fmt"
"math/rand"
"sort"
"strconv"
)
func main() {
lines := []string{"banana", "apple", "Cherry", "123", "apple"}
// 字典序(Go 默认按字节比较,大写字母 < 小写字母)
sortedLex := make([]string, len(lines))
copy(sortedLex, lines)
sort.Strings(sortedLex)
fmt.Println("字典序:", sortedLex)
// 数字序
var nums []int
for _, l := range lines {
if n, err := strconv.Atoi(l); err == nil {
nums = append(nums, n)
}
}
sort.Ints(nums)
fmt.Println("数字序:", nums)
// 长度序
sortedLen := make([]string, len(lines))
copy(sortedLen, lines)
sort.Slice(sortedLen, func(i, j int) bool {
return len(sortedLen[i]) < len(sortedLen[j])
})
fmt.Println("长度序:", sortedLen)
// 随机
shuffled := make([]string, len(lines))
perm := rand.Perm(len(lines))
for i, p := range perm {
shuffled[i] = lines[p]
}
fmt.Println("随机:", shuffled)
}#!/usr/bin/env bash
lines=("banana" "apple" "Cherry" "123" "apple")
# 字典序(sort 默认字典序,大写字母在前)
printf '%s\n' "${lines[@]}" | sort
echo "---"
# 数字序(仅纯数字行)
printf '%s\n' "${lines[@]}" | grep -E '^[0-9]+$' | sort -n
echo "---"
# 长度序
printf '%s\n' "${lines[@]}" | awk '{ print length, $0 }' | sort -n | cut -d' ' -f2-
echo "---"
# 随机(shuf 打乱)
printf '%s\n' "${lines[@]}" | shuf这是字典序排序的典型现象,因为它是逐字符比较的:'第10章'中的'1'在ASCII码中比'2'小,所以排在'第2章'前面。要解决这个问题,请使用数字序排序。本工具的数字序模式能识别字符串中的数字部分,将'10'作为数值10处理,从而按正确的章节顺序排列。如果你的文本中数字前面有补零(如'第01章'),字典序也能排对。
大概率不是bug。请检查输入文本末尾是否有空行:如果最后一行是空行,排序时它会被当作一个空字符串参与排序,结果可能跑到最前面或最后面,导致你误以为少了一行。建议先检查输入内容,确保每行都有实际文字。另外,本工具对完全相同的重复行会保留,不会去重。
本工具长度排序是按字符数(Unicode字符长度)计算的,一个汉字算1个字符,一个英文字母也算1个字符。所以中英文混排时,'abc'(3字符)会比'你好'(2字符)长。如果你需要按字节数排序(比如处理某些数据库导出的固定宽度文本),本工具暂不支持,可以考虑先用其他工具将文本按编码转为字节后再操作。
本工具随机排序基于浏览器的加密级随机数生成器(crypto.getRandomValues),每次点击都会生成全新的随机顺序,理论上不可预测。但请注意:如果你输入的内容只有一行,排序结果当然永远是那一行;如果只有两行,50%概率互换。如果需要可复现的随机顺序(比如用于测试),本工具暂不支持指定种子,建议手动记录排序前的顺序。
数字序排序默认按数值大小升序排列,负数会排在正数前面。如果-3排到了最后,请检查你的输入中-3前面是否有空格或其他不可见字符(如全角减号、制表符)。本工具只识别标准的ASCII减号'-'作为负号,且要求数字前后无多余字符。如果一行是' -3'(前面有空格),它会被当作字符串处理,导致排序异常。建议先清理文本格式。
正常。字典序逐字符比较:'2023'和'2024',前三位'202'相同,第四位'3'比'4'小,所以2023排在2024前面。这是正确的字典序结果。如果你希望按年份数值排,使用数字序模式即可——它会将'2023'作为数值2023处理,结果与字典序一致。但如果你的文本是'2023年1月'和'2023年2月',字典序也能正确按月份排,因为'1'在'2'前面。
本工具目前没有撤销或历史记录功能,排序操作会直接覆盖结果区域。建议在排序前先复制一份原始文本到记事本或另一个标签页。如果已经排序了且没备份,唯一的办法是重新输入原始数据。对于重要数据,养成先备份的习惯。未来版本可能会考虑增加'恢复原始顺序'功能,但当前需要用户自行保留副本。
纯前端排序,一千行文本完全在浏览器处理能力范围内,不会卡死。本工具实现方式为FE(纯浏览器端),所有计算在本地完成,不涉及网络传输。实测在普通电脑上,一万行文本排序响应时间也在毫秒级。但如果你的单行文本特别长(如每行数万个字符),总数据量达到几十MB,可能会略微影响页面响应。建议分批次处理超大文本。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。