2013-04-22 2 views
1

이있어 같은 루비 배열 : 나는 그것을 정렬하고 싶은(존재 옵션 키 + 값으로 정렬)

[ { "lat" => 123, "lon" => 456 }, 
    { "lat" => 789, "lon" => 102, "col" => "red" }, 
    { "lat" => 442, "lon" => 342 } ] 

그래서 그 핵심 뜻으로 col 어떤 해시 어레이의 상단 또는 하단으로 밀어야합니다.

오른쪽 sort_by 구문/의미를 알아낼 수 없습니다.

+0

상단 또는 하단; 어느? – sawa

+0

작성한 코드는 무엇입니까? –

답변

4
a = [ { "lat" => 123, "lon" => 456 }, 
    { "lat" => 789, "lon" => 102, "col" => "red" }, 
    { "lat" => 442, "lon" => 342 } ] 

당신이 정상에 올려 싶은 경우에,

a.partition{|h| h.key?("col")}.flatten 

당신이 주석 사람에 의해 제안 후, 하단에 넣어하려는 경우,

a.partition{|h| h.key?("col").!}.flatten 
+0

Thanks @sawa :) –

+2

맨 아래에 넣으려면'! h.key? ('col')'를 실행하고'reverse'를 제거하십시오. 그들은 같은 일을 성취해야하지만 일을 줄여야합니다. –

+0

그래, 그게 더 좋다. – sawa

1

항상 좋아하는 기능적 접근 방식 :

require 'pp' 

a = [ {:foo => "aa","col" => "bar"}, { "lat" => 123, "lon" => 456 }, 
    { "lat" => 789, "lon" => 102, "col" => "red" }, 
    { "lat" => 442, "lon" => 342 } ] 

arr = a.group_by{|h| h.key?("col")} 

pp arr[false] + arr[true] # on the bottom 

출력 :

[{"lat"=>123, "lon"=>456}, 
{"lat"=>442, "lon"=>342}, 
{:foo=>"aa", "col"=>"bar"}, 
{"lat"=>789, "lon"=>102, "col"=>"red"}] 

pp arr[true] + arr[false] #on the top 

출력 :

[{:foo=>"aa", "col"=>"bar"}, 
{"lat"=>789, "lon"=>102, "col"=>"red"}, 
{"lat"=>123, "lon"=>456}, 
{"lat"=>442, "lon"=>342}] 
+0

감사합니다. @RubyLovely –