How to sort an array of hashes in ruby

前端 未结 5 912
盖世英雄少女心
盖世英雄少女心 2020-11-30 19:53

I have an array, each of whose elements is a hash with three key/value pairs:

:phone => \"2130001111\", :zip => \"12345\", :city => \"sometown\"


        
相关标签:
5条回答
  • 2020-11-30 19:57

    If you want to paginate for data in array you should require 'will_paginate/array' in your controller

    0 讨论(0)
  • 2020-11-30 20:17

    Simples:

    array_of_hashes.sort_by { |hsh| hsh[:zip] }
    

    Note:

    When using sort_by you need to assign the result to a new variable: array_of_hashes = array_of_hashes.sort_by{} otherwise you can use the "bang" method to modify in place: array_of_hashes.sort_by!{}

    0 讨论(0)
  • 2020-11-30 20:19

    If you have Nested Hash (Hash inside a hash format) as Array elements (a structure like the following) and want to sort it by key (date here)

    data =  [
        {
            "2018-11-13": {
                "avg_score": 4,
                "avg_duration": 29.24
            }
        },
        {
             "2017-03-13": {
                "avg_score": 4,
                "avg_duration": 40.24
            }
        },
        {
             "2018-03-13": {
                "avg_score": 4,
                "avg_duration": 39.24
            }
        }
    ]
    

    Use Array 'sort_by' method as

    data.sort_by { |element| element.keys.first }
    
    0 讨论(0)
  • 2020-11-30 20:21

    Use the bang to modify in place the array:

    array_of_hashes.sort_by!(&:zip)
    

    Or re-assign it:

    array_of_hashes = array_of_hashes.sort_by(&:zip)
    

    Note that sort_by method will sort by ascending order.

    If you need to sort with descending order you could do something like this:

    array_of_hashes.sort_by!(&:zip).reverse!
    

    or

    array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
    
    0 讨论(0)
  • 2020-11-30 20:22
    sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
    
    0 讨论(0)
提交回复
热议问题