如题: 项目中使用表格,有表格就有排序,中国人当然少不了中文了,问题来了,汉字排序的意义是什么?
排序方案:
汉字拼音首字母排序 此排序需要借助字典,这样每个汉字都参与排序的顺序,能够更精准快速的让阅读者定位到位置(个人观点)。
汉字本地化排序 我这里说的是用( 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 范围就好办,本身好像就是按最常见读音来排的。 |
/td> | 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 不应该是按照新华字典顺序也就是拼音顺序排的吗?这不就是首字母吗? |
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 PRO 多音字怎么办呢 |
![]() | 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 了 |