1
如代碼:在Ruby中,有沒有辦法使用| i,j |來替代「arr.sort {| i | Math.cos(i)* Math.sin(i)}」。並重復兩次?
irb(main):001:0> a = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):002:0> a.sort {|d,e| (d - 3).abs <=> (e - 3).abs}
=> [3, 2, 4, 1, 5] # sort by closest distance away from the number 3
它也不是那麼好重複兩次表達,實在是太微不足道創建一個函數只是該表達式。有沒有還寫類似
irb(main):002:0> a.sort {|e| (e - 3).abs} # compare by this expression
工作,即使在1.8.6! – 2010-11-01 11:54:37
順便說一句,文檔說它比較慢:http://ruby-doc.org/core/classes/Enumerable.html#M003120「sort_by的當前實現生成一個包含原始集合元素和映射的元組數組值,這使得sort_by在鍵集很簡單時相當昂貴「我在Ruby 1.8.6,1.8.7和1.9.2中嘗試過,它們是相同的。我想這是新一代數據讓它變慢。 – 2010-11-01 12:07:54
也許我們可以改變'sort'來自動使用Metaprogramming來做到這一點(它可以檢測到塊只需要一個參數?),或者創建另一種方法使其與'sort'一樣快? – 2010-11-01 12:10:09