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作排列︰
如何?兩種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