可惜裝這VS2010CTP的機器現在不在手上,不然倒可以試試我有沒有記錯C++0x裡的lambda語法。沒錯,VS2010已經支持部分的C++0x標准了,很多東西都會變得更方便 XD
不過VS2010支不支持新的range-based for statement來著?忘了……查了一下,發現是不會 T T
因為這個新的for循環語句是基於concept,而concept在VC10的編譯器的編寫過程中還沒定案,所以……T T
當然,如果Person這個struct有一個公認的自然順序,那最好還是直接在裡面重載<運算符,那樣要排序的話就能直接用兩個參數版本的sort()了。不過這裡舉的例子是題目,struct裡的內容不讓改,也就罷了。
題外話,不過這樣的一個裸struct在F#裡用tuple或者record來表示也可以嘛。如果用tuple,要對這樣一個list排序的話……
F#代碼
let l = [(2, "smith"); (1, "john"); (2, "micheal"); (1, "micheal"); (3, "albert")] List.sort compare l;; // val it : (int * string) list = [(1, "john"); (1, "micheal"); (2, "micheal"); (2, "smith"); (3, "albert")]
用List.sort compare就行了 T T 還有什麼能比這個更方便的麼?
Hmm,Ruby要是不用Struct來建個類型而是直接用數組的話……
Ruby代碼
l = [[2, "smith"], [1, "john"], [2, "micheal"], [1, "micheal"], [3, "albert"]] l.sort #=> [[1, "john"], [1, "micheal"], [2, "micheal"], [2, "smith"], [3, "albert"]]
腳本語言用起來不爽的話就沒存在價值了 XDD
牢騷一篇,結束(逃