按元素排序数组

时间:2013-01-15 11:38:20

标签: ruby-on-rails

我试图通过arr。

中的值来安排@plrdet

当我选择这种方式时:

@plrdet = Player.find_all_by_fid(arr)

它按照表中行的顺序返回,我希望按arr的顺序排序。

例如: 播放器包含以下属性:地址年龄,uniqnum。

arr

是uniqnum的数组。

ARR = [ 456 123 ,789]

玩家= [{NYC,32123},{BSAS,27456},{LND,30789})

我要找的结果应该来自“find_all” 玩家= [{BSAS,27,的 456 },{NYC,32, 123 },{LND,30789})

2 个答案:

答案 0 :(得分:1)

如果我理解这个问题,我会尝试这样的事情:

哈希版本

players = [{}]
@plrdet.each do |player|
    players << {"adress" => player.adress, "age" => player.age, "fid" => player.fid}
end
players.inspect

现在结果应为[{“adress”=&gt; BSAS,“年龄”=&gt; 27,“fid”=&gt; 456},{“adress”=&gt;纽约,“年龄”=&gt; 32,“fid”=&gt; 123},{“adress”=&gt; LND,“年龄”=&gt; 30,“fid”=&gt; 789}]

数据版

players = [[]]
@plrdet.each do |player|
    players << [player.adress, player.age, player.fid]
end

现在的结果应该是[[BSAS,27,456],[NYC,32,123],[LND,30,789]]

<强>排序

我认为这个解决方案应该可行,但我不喜欢它,并且可能有更好的方法来解决您的问题:

sorted_players = [[]] 
arr.each do |arr_fid| 
    sorted_players << players.collect{|player| player if player.include?(arr_fid)} 
end 

答案 1 :(得分:0)

您有两种选择:

  1. 使用order使用查询
  2. 对结果进行排序
  3. 使用sort对内存中的结果进行排序
  4. 您可以使用1.它将类似于:

    @plrdet = Player.find_all_by_fid(arr).order("address")