Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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
Ruby 是否可以按子哈希值对多维哈希进行排序?_Ruby_Hash - Fatal编程技术网

Ruby 是否可以按子哈希值对多维哈希进行排序?

Ruby 是否可以按子哈希值对多维哈希进行排序?,ruby,hash,Ruby,Hash,是否可以按子键的值对父哈希进行排序 例如: { :a => {:order => 3}, :b => {:order => 1}, :c => {:order => 2} } 求助于 { :b => {:order => 1}, :c => {:order => 2}, :a =>

是否可以按子键的值对父哈希进行排序

例如:

{
    :a => 
        {:order => 3},
    :b =>
        {:order => 1},
    :c =>
        {:order => 2}
}
求助于

{
    :b => 
        {:order => 1},
    :c =>
        {:order => 2},
    :a =>
        {:order => 3}
}

您可以将其转换为成对数组,使用方法以要排序的值为目标,然后将其转换回哈希:

h = {
    :a => 
        {:order => 3},
    :b =>
        {:order => 1},
    :c =>
        {:order => 2}
}

h.sort_by {|k,v| v[:order]}.to_h
=> {:b=>{:order=>1}, :c=>{:order=>2}, :a=>{:order=>3}} 

请记住,Ruby哈希的唯一顺序是基于插入顺序的。您需要创建一个新的散列(no
sort!
),并按照您希望的顺序逐个元素创建新的散列

鉴于:

> hash
=> {:a=>{:order=>3}, :b=>{:order=>1}, :c=>{:order=>2}}
您可以使用
.sort\u by
执行以下操作:

> hash.sort_by {|k, h| h[:order]}.to_h
=> {:b=>{:order=>1}, :c=>{:order=>2}, :a=>{:order=>3}}
您还可以使用更经典的
.sort
对宇宙飞船
进行排序,方法是解包与通常的
a、b
相关的参数:

> hash.sort {|(a,ha),(b,hb)| ha[:order] <=> hb[:order] }.to_h
=> {:b=>{:order=>1}, :c=>{:order=>2}, :a=>{:order=>3}}
hash.sort{|(a,ha),(b,hb)| ha[:order]hb[:order]}.to|h =>{:b=>{:order=>1},:c=>{:order=>2},:a=>{:order=>3} 在这两种情况下,
.to_h
方法都会基于源哈希中已排序的键、值对创建一个新的哈希


最好

接近,但如果这是目标,你需要将它们重新组合成散列。我只是在事后才注意到这一点。到那时,其他人已经这样做了。请记住,散列是用于未排序的容器的。Ruby只支持一种排序方法:插入顺序。