Natural Order是否真的Natural?

何謂Natural Order?就是Ascending Order,順序排列。

幾乎每種Programming language都有Natural Order Sort的built-in function。以Java來說,就以Arrays.sort()為例︰
String[] strings = new String[] {"Dog", "Cat", "Bird", "Cow"};
Arrays.sort(strings);
for (String string : strings) { System.out.println(string); }

毫無疑問Output是︰
Bird
Cat
Cow
Dog

很好,現在我們保留這段code,不過內容改變一下,改為Filename︰
String[] strings = new String[] {"A2.txt", "A10.txt", "A1.txt", "A20.txt"};
Arrays.sort(strings);
for (String string : strings) { System.out.println(string); }

答案依然很簡單︰
A1.txt
A10.txt
A2.txt
A20.txt

現在,隨便的在你的電腦開一個Folder,開四個File︰A1.txt、A10.txt、A2.txt、A20.txt。把Folder以Filename作排列︰
Natural Order in OS

如何?兩種sort都一樣是Natural Order Sort,但結果竟然不一樣。原因很簡單,定義不同。Programming Language的Natural Order是指ASCIIbetical,你電腦的Natural Order是指Alphabetical。

兩者是不一樣的。簡單舉個例,作為一個User,我管它甚麼ASCIIbetical,我壓根兒就不知道ASCII是甚麼。因此,作為一個User,看到System的ASCIIbetical Order,不禁會不明所以,甚至投訴System有bug云云。

教訓︰定義要清楚而有共識,而且要確認我的共識跟你的共識是同一共識。

參考︰
Alphabetical != ASCIIbetical
Sorting for Humans : Natural Sort Order
Natural Order String Comparison
The Alphanum Algorithm

Leave a Comment

Spam protection by WP Captcha-Free