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