Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 on rails ruby中哈希的排序数组_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails ruby中哈希的排序数组

Ruby on rails ruby中哈希的排序数组,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何对哈希数组进行排序如果我有预先确定的顺序,我有一个数组需要按如下方式排序: array = [{:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:name, :attr_value=>20}, {:attr_name=>:similarity, :attr_value=>0}, {:attr_name=>:weight, :attr_value=>50}] [{:attr_name

如何对哈希数组进行排序如果我有预先确定的顺序,我有一个数组需要按如下方式排序:

   array =  [{:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:name, :attr_value=>20}, {:attr_name=>:similarity, :attr_value=>0}, {:attr_name=>:weight, :attr_value=>50}]
[{:attr_name=>:name, :attr_value=>20}, {:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:weight, :attr_value=>50}, {:attr_name=>"similarity", :attr_value=>0}]
我有一个散列,我想根据它来排序:

pre_sorted = {
            :name => 0,
            :phone => 1,
            :weight=> 2,
            :similarity => 3
        }
排序后,我的数组应如下所示:

   array =  [{:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:name, :attr_value=>20}, {:attr_name=>:similarity, :attr_value=>0}, {:attr_name=>:weight, :attr_value=>50}]
[{:attr_name=>:name, :attr_value=>20}, {:attr_name=>:phone, :attr_value=>30}, {:attr_name=>:weight, :attr_value=>50}, {:attr_name=>"similarity", :attr_value=>0}]
我查看了ruby sort和sort by docs,发现了与So相关的问题,但无法解决,因为我刚刚开始使用rails。

数组#sort接受用于比较的代码块:

array.sort{a,b |预排序[a[:attr_值]]预排序[b[:attr_值]]

要按给定标准对数组进行排序,可以使用
排序依据
。在您的情况下,您希望按照
pre_sorted
散列中的条目进行排序,因此:

array.sort_by do |hash|
  pre_sorted[ hash[:attr_name] ]
end

为什么
相似性
是数组中的一个字符串,而
预排序
哈希中的一个符号?@sepp2k谢谢这是我的错别字,我现在已经更正了。谢谢你的回答,当我使用您的方法时,我得到错误
将Fixnum与nil进行比较失败
@gandalstormcrow,如果指定给
sort\u by
的块返回
nil
,在这种情况下,如果
pre\u sorted
不包含(至少)一个
attr\u name
的值,就会发生这种情况。然而,考虑到问题中的代码,这种情况不应该发生(事实上不应该发生——我只是尝试过了)。当您开始深入到一个对象或结构中以访问您想要比较的值时,您应该考虑达到该目的所需的成本,并认真考虑使用
排序依据
。要了解原因,请阅读有关“”的内容,这是它的用途。Randall Schwartz需要更多的阅读。我不知道排序方式中存在固有的优化。Ruby总是给我留下深刻的印象。它不是Ruby优化,而是转换的好处。