在Ruby中,有没有一种方法;arr.sort{i|Math.cos(i)*Math.sin(i)}”;而是使用| i,j |并重复两次?

在Ruby中,有没有一种方法;arr.sort{i|Math.cos(i)*Math.sin(i)}”;而是使用| i,j |并重复两次?,ruby,Ruby,例如守则: 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 您正在寻找排序方法: a.sort_by {|e| (e - 3).ab

例如守则:

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

您正在寻找
排序方法:

a.sort_by {|e| (e - 3).abs}

您正在寻找
排序方法:

a.sort_by {|e| (e - 3).abs}

顺便说一句,文档说它慢了一些:“sort_by的当前实现生成了一个包含原始集合元素和映射值的元组数组。这使得sort_by在键集简单时相当昂贵。”我在Ruby 1.8.6、1.8.7和1.9.2中尝试过,它们是一样的。我猜是新数据的生成使它变慢了。也许我们可以改变
排序
,使用元编程自动完成(它能检测到只需要一个参数的块吗?),或者创建另一种方法,使其与
排序
一样快@動靜能量: 它说,如果排序键是“简单的”(虽然可能不足以产生实际的区别),那么它的成本会更高。对于昂贵的计算,
sort_by
会更快,因为每个键只计算一次。除非你知道
sort
对你的程序来说更快,而且差异实际上很重要,否则尝试优化是没有意义的。顺便说一下,医生说它更慢:“sort_by的当前实现生成一个元组数组,其中包含原始集合元素和映射值。当键值集很简单时,这使得排序相当昂贵“我在Ruby 1.8.6、1.8.7和1.9.2中试过,它们都是一样的。我想是新数据的生成使它变慢了。也许我们可以改变
sort
,使用元编程自动完成(它能检测到只需要一个参数的块吗?),或创建另一种方法使其与排序一样快@動靜能量: 它说,如果排序键是“简单的”(虽然可能不足以产生实际的区别),那么它的成本会更高。对于昂贵的计算,
sort\u by
会更快,因为每个键只计算一次。除非您知道
sort
对于您的程序来说更快,而且差异实际上很重要,否则尝试优化是没有意义的。