

Rubyで二つのJSON配列 `a`, `b` を `+` 演算子によって結合し、`c = a + b` という配列を作りました。  
その後で `c` を "id" というキーの値でソートしたいのですが、うまくソートされてくれません。

以下に試したことと結果を記載するので、もしお分かりの方はご教授頂けると幸いです。

### 試したこと

[code]

    a = [{id: 10000, name: "aaa"}, {id: 15000, name: "zzz"}]
    b = [{id: 12000, name: "bbb"}, {id: 20000, name: "yyy"}]
    
    c = a + b
    => [{:id=>10000, :name=>"aaa"}, {:id=>15000, :name=>"zzz"}, {:id=>12000, :name=>"bbb"}, {:id=>20000, :name=>"yyy"}]
    
    c.sort_by{|a| a["id"]}.reverse
    => [{:id=>20000, :name=>"yyy"}, {:id=>12000, :name=>"bbb"}, {:id=>15000, :name=>"zzz"}, {:id=>10000, :name=>"aaa"}]
    
    =======
    
    ↓（本当はこのようにソートされて欲しい）
    [{:id=>20000, :name=>"yyy"}, {:id=>15000, :name=>"zzz"}, {:id=>12000, :name=>"bbb"} {:id=>10000, :name=>"aaa"}]
    
[/code]


CC BY-SA 4.0
2020-01-05T09:17:46.750
61983
2020-01-06T00:41:23.897
2020-01-06T00:41:23.897
3060
37324
question
ruby json
RubyでJSONの配列を結合した後にソートしたい


SymbolがキーのHashの配列のように見えます。そのため `a["id"]` では`a[:id]` の値がうまく取れずソートできていなさそうです。

[code]

    a = {id: 10000, name: "aaa"}
    # => {:id=>10000, :name=>"aaa"}
    a["id"]
    # => nil
    a[:id]
    # => 10000
    
[/code]

`sort_by` に渡すブロックをこのように変更してはいかがでしょうか

[code]

    c.sort_by{|a| a[:id]}.reverse
    
[/code]


CC BY-SA 4.0
2020-01-05T09:27:11.463
61984
2020-01-05T09:27:11.463
2599
61983
answer