2013-06-28 98 views
0

我想按照受欢迎程度值对数组进行排序。我怎样才能做到这一点?按照下一级值对数组顶级进行排序 - Ruby

[ 
    { 
    "id"=>1, 
    "popularity"=>7.77030797174916, 
    "title"=>"Another film", 
    }, 
    { 
    "id"=>2, 
    "popularity"=>2.7703074916, 
    "title"=>"A film", 
    }, 
    { 
    "id"=>3, 
    "popularity"=>9.77030797174916, 
    "title"=>"A third film", 
    } 
] 
+0

使用'sort_by',然后写一个翻出普及块 –

回答

0

显然我们应该在这里使用Enumerable#sort_by

a = [ 
    { 
    "id"=>1, 
    "popularity"=>7.77030797174916, 
    "title"=>"Another film", 
    }, 
    { 
    "id"=>2, 
    "popularity"=>2.7703074916, 
    "title"=>"A film", 
    }, 
    { 
    "id"=>3, 
    "popularity"=>9.77030797174916, 
    "title"=>"A third film", 
    } 
] 
a.sort_by{|h| h["popularity"]} 
# => [{"id"=>2, "popularity"=>2.7703074916, "title"=>"A film"}, 
#  {"id"=>1, "popularity"=>7.77030797174916, "title"=>"Another film"}, 
#  {"id"=>3, "popularity"=>9.77030797174916, "title"=>"A third film"}] 

或者我还可以使用Enumerable#sort

a = [ 
    { 
    "id"=>1, 
    "popularity"=>7.77030797174916, 
    "title"=>"Another film", 
    }, 
    { 
    "id"=>2, 
    "popularity"=>2.7703074916, 
    "title"=>"A film", 
    }, 
    { 
    "id"=>3, 
    "popularity"=>9.77030797174916, 
    "title"=>"A third film", 
    } 
] 
a.sort{|h1,h2| h1["popularity"] <=> h2["popularity"]} 
# => [{"id"=>2, "popularity"=>2.7703074916, "title"=>"A film"}, 
#  {"id"=>1, "popularity"=>7.77030797174916, "title"=>"Another film"}, 
#  {"id"=>3, "popularity"=>9.77030797174916, "title"=>"A third film"}] 

BENCHMARK

require 'benchmark' 

a = [ 
    { 
    "id"=>1, 
    "popularity"=>7.77030797174916, 
    "title"=>"Another film", 
    }, 
    { 
    "id"=>2, 
    "popularity"=>2.7703074916, 
    "title"=>"A film", 
    }, 
    { 
    "id"=>3, 
    "popularity"=>9.77030797174916, 
    "title"=>"A third film", 
    } 
] 

Benchmark.bm(100) do |b| 
    b.report("Sort") { a.sort{|h1,h2| h1["popularity"] <=> h2["popularity"]} } 
    b.report("Sort by") { a.sort_by{|h| h["popularity"]} } 
end 

       user  system  total  real 
Sort   0.000000 0.000000 0.000000 ( 0.000041) 
Sort by  0.000000 0.000000 0.000000 ( 0.000019) 
相关问题