如题: 项目中使用表格,有表格就有排序,中国人当然少不了中文了,问题来了,汉字排序的意义是什么?
排序方案:
汉字拼音首字母排序 此排序需要借助字典,这样每个汉字都参与排序的顺序,能够更精准快速的让阅读者定位到位置(个人观点)。
汉字本地化排序 我这里说的是用( Javascript 中,String.localeCompare() )去做的比较排序,感觉排序出来的内容是针对拼音的排序,往往前一两个汉字就决定了排序的顺序,感觉排序不够完美。
汉字谈什么排序 是的,我和同事去讨论排序问题,他说:汉字谈什么排序,有什么意义,让他按照 ASCII 码自己排序不就完了?
额,作为一个程序猿,难道不应该站在用户到角度去考虑产品的易用性么?还是我去考虑这个排序问题确实没用?
看看大家对表格中的汉字排序有啥看法,另外有没有对首字母排序的方案有一些优秀代码的推荐。
1
sundev 2017-12-06 09:20:45 +08:00
怎么可能没意义,如果数据多了,不排序找起来很不方便的。
|
2
zhuzhuyule OP 那就死支持排序 +1 了?
|
3
meszyouh 2017-12-06 09:32:09 +08:00
有种变相地分类的感觉
|
4
chztv 2017-12-06 09:34:21 +08:00
排序肯定有意义,至于是按什么排,要从产品需求角度出发,比如有很多人名,也可以按姓氏笔划排序。
|
5
cctv1005s927 2017-12-06 09:34:29 +08:00
汉字排序感觉还是挺正常的需求啊,excel 不都可以做汉字排序吗?
|
6
yksoft1 2017-12-06 09:35:41 +08:00
GB2312 范围就好办,本身好像就是按最常见读音来排的。
|
7
RqPS6rhmP3Nyn3Tm 2017-12-06 09:42:37 +08:00
怎么可能没有意义,当代汉语拼音是最常用的就不说了,古人用过的有笔画数排序、部首排序、千字文排序。用了这么久的说没意义就没意义
|
8
zhuzhuyule OP |
9
zhuzhuyule OP @cctv1005s927 大软件肯定应该满足这个需求的。那就是产品中能加入中文排序就最好加入中文排序了。
|
10
miaoer1 2017-12-06 09:51:02 +08:00 via Android
粑粑让你排你就乖乖排,还叫粑粑自己按 ascii 排。找抽啊。
|
11
zhuzhuyule OP @yksoft1 难道是 方法三? 让他自己去排就可以了?
|
12
zhuzhuyule OP @BXIA 少量的 那也没问题,数据量大,还是拼音首字母查比较方便。
|
13
zhuzhuyule OP @miaoer1 那就是同意 方法一了?
|
14
johnnie502 2017-12-06 10:19:09 +08:00
估计没几个人看明白楼主的所谓按汉字首字母排序的说法,我的理解是
例如: 张三 ZS 账本 ZB 按照普通的排序方法的话,是第一个汉字在码表里面的位置,拍成 张三 ZS 账本 ZB 如果按照首字母排序的话,则应该是 账本 ZB 张三 ZS 实际上这种排序意义不大,多数人还是按照第一个字的读音来定位,所以我选择 3 |
15
amaranthf 2017-12-06 10:24:04 +08:00
那个,汉字没有 ASCII 码……
|
16
geelaw 2017-12-06 10:44:55 +08:00
字典也有不同的排序啊,按照读音排序有多音字的问题,按照部首排序有多部首的问题。比较简单的是按照笔画排序。
|
17
zhuzhuyule OP @johnnie502
那你在看看如下的汉字排序,不知道你的默认排序 ASCII 奇 22855 所 25151 期 26399 沙 27801 绮 32494 锁 38145 3,方法 ['锁骨','绮绮' ,'沙滩','期望','期望','期望','期望','期望','期望','期望','期望','所以'].sort() ==》 ["所以", "期望",'期望','期望','期望','期望','期望','期望','期望', "沙滩", "绮绮", "锁骨"] ==》 ["SQ", "QW",'QW','QW','QW','QW','QW','QW','QW', "ST", "QQ", "SG"] (当类似 "期望" 这种字符比较多的时候,你还只的后面会有 'S' 开头的 汉字吗?) 2,方法 ['锁骨','绮绮' ,'沙滩','期望','期望','期望','期望','期望','期望','期望','期望','所以'].sort((a,b)=>{ return a.localeCompare(b,'zh')}) ==》 ["期望",'期望','期望','期望','期望','期望','期望','期望', "绮绮", "沙滩", "所以", "锁骨"] ==》 [ "QW",'QW','QW','QW','QW','QW','QW','QW', "QQ", "ShaTan", "SuoYi", "SuoGu"] (注意到 上面的 ["沙滩", "所以", "锁骨"] 了吧, localeCompare 如果比较拼音相同,则会检验 ASCII 码,第二个值不去作比较了) 1,方法 ['锁骨','绮绮' ,'沙滩','期望','期望','期望','期望','期望','期望','期望','期望','所以'].首字母排序() ==》 ["期望",'期望','期望','期望','期望','期望','期望','期望', "绮绮", "锁骨", "沙滩", "所以"] ==》 [ "QW",'QW','QW','QW','QW','QW','QW','QW', "QQ", "SuoGu", "ShaTan", "SuoYi"] (按照首字母排序能够更快的找到你想要的东西) 以上只是举个例子,ASCII 排序没有意义了吧. 请赐教。 |
18
zhuzhuyule OP |
19
sosilver 2017-12-06 11:10:59 +08:00 via Android
联系人应用不就用这个吗
|
20
xml123 2017-12-06 11:19:55 +08:00
一般而言都是方法二吧,如果我没有理解错的话。毕竟相同汉字开头的词语放在一起更符合直觉吧,单纯的把每个字的拼音首字母取出来,实际上效果并不会好吧。
|
21
NonClockworkChen 2017-12-06 11:20:59 +08:00
@sosilver 复议,电话本就是这样...
|
22
zsx 2017-12-06 11:21:32 +08:00
localCompare 可以看我这篇文章,有大坑: https://blog.zsxsoft.com/post/31
|
23
chiu 2017-12-06 12:22:38 +08:00 via Android
手机电话薄里不也排序了
|
24
just1 2017-12-06 12:27:24 +08:00 via Android
gb2312 不应该是按照新华字典顺序也就是拼音顺序排的吗?这不就是首字母吗?
|
25
KgM4gLtF0shViDH3 2017-12-06 12:36:06 +08:00
反正通讯录是肯定要排序的。
|
26
zhuzhuyule OP |
27
openbsd 2017-12-06 15:11:12 +08:00
数据量大重音多的话个人倾向方法一 +
首字首拼 首字二拼 ..... 二字首拼 二字二拼..... 三字首拼 微软的做法(瘟 server 里中文用户名排序为例)应该还加入了声调 双人名,首字首拼 首字二拼 ....末字乱序 例如 顺序状态(三角形向上 )汪 王 吴 多音字,以该字读音(自然读音 ?)在前的为准 比如 曾 就排在 陈 前 但是在姓里貌似我认识的都念( zeng ) |
28
Showfom 2017-12-06 15:22:56 +08:00
多音字怎么办呢
|
29
houbaron 2017-12-06 17:09:09 +08:00 via Android
转成 GBK 编码似乎可以汉语拼音序
|
30
zhuzhuyule OP @openbsd 对的,加入音调和全拼,会导致字典变大的,再加入声调,就更大了,所以个人还是觉得 多字首字母排序。
|
31
zhuzhuyule OP @Showfom 多音字都没有很好的办法解决,只能群举了。告诉排序函数,哪些多音字需要指定翻译。
|
32
zhuzhuyule OP @houbaron 这个场景太局限了,而且也不一定准吧。
|
33
rick09 2017-12-06 19:24:31 +08:00
拼音排序,还是直接存储全拼最好。
张三 ZS ZHANGSHAN |
34
bmxbmx3 2021-03-07 15:29:27 +08:00
我写的中文排序库 cn_sort 应该可以帮到你,放在 pypi 了
|