Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在ruby中对哈希数组进行排序_Arrays_Ruby_Sorting - Fatal编程技术网

Arrays 如何在ruby中对哈希数组进行排序

Arrays 如何在ruby中对哈希数组进行排序,arrays,ruby,sorting,Arrays,Ruby,Sorting,我有一个数组,每个数组元素都是一个包含三个键/值对的散列: :phone => "2130001111", :zip => "12345", :city => "sometown" 我想按zip对数据进行排序,以便将同一区域中的所有手机放在一起。Ruby有没有一个简单的方法?是否可以对数组中的数据进行分页?简单: array_of_hashes.sort_by { |hsh| hsh[:zip] } 注意: 使用sort\u by时,需要将结果赋给一个新变量:array\u

我有一个数组,每个数组元素都是一个包含三个键/值对的散列:

:phone => "2130001111", :zip => "12345", :city => "sometown"
我想按
zip
对数据进行排序,以便将同一区域中的所有
手机
放在一起。Ruby有没有一个简单的方法?是否可以对数组中的数据进行分页?

简单:

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


使用
sort\u by
时,需要将结果赋给一个新变量:
array\u of_hashes=array\u of_hashes.sort\u by{}
否则可以使用“bang”方法就地修改:
array\u of_hashes.sort\u by!{}

sorted=dataarray.sort{a,b | a[:zip]b[:zip]}
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}

如果要为数组中的数据分页,则应在控制器中要求“will_paginate/array”

使用bang就地修改数组:

array_of_hashes.sort_by!(&:zip)
或重新分配:

array_of_hashes = array_of_hashes.sort_by(&:zip)
请注意,sort\u by方法将按升序排序。

如果需要按降序排序,可以执行以下操作:

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

如果将嵌套哈希(哈希格式中的哈希)作为数组元素(如下所示的结构),并希望按键(此处的日期)对其排序

将数组“sort_by”方法用作

data.sort_by { |element| element.keys.first }

使用
sort\u by
时,需要将结果赋给一个新变量:
array\u of_hashes=array\u of_hashes.sort\u by{}
否则可以使用“bang”方法就地修改:
array\u of_hashes.sort\u by!{}
甚至更短:
散列数组。sort_by(&:zip)
@Etienne:这是
的快捷方式。sort_by{hsh | hsh.zip}
因此,只有将
.zip
定义为每个散列的方法时,它才会起作用。默认情况下,散列不会将它们的键公开为方法,因此我猜您可能还有其他原因。请注意:砰的一声:
array\u of\u hashes.sort\u By!(&:zip)
@Gareth:对于ActiveRecords,
.zip
[:zip]
都可以工作。ActudieCords具有两种风格定义。如果生成数组而不是给定的数组,则考虑将其设为哈希,使用元素(例如)<代码> [城市,zip ]= >电话< /代码>或<代码>城市> > {zIP1= > [],zIP2= >…} /代码>。符号<代码> &:是方法> /Cyto>,不是<代码>属性< /代码>!您假定散列有反映属性的方法。感谢
反向
方法:p这仅在“父”散列只有一个键(本例中为日期)时有效,因为在某些ruby版本中,
.keys
的顺序是不确定的。
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
        }
    }
]
data.sort_by { |element| element.keys.first }