基于Ruby on Rails中的定义数组按字符串排序的最有效方法

时间:2015-07-30 14:30:39

标签: ruby-on-rails arrays performance sorting

我正在尝试找到一种最有效的方法,根据来自另一个数组的已定义顺序对数组进行排序,并将其显示在我的演示者中。数组的属性需要排序,我想排序,' name'。所以有一个功能,' dogs_available'返回一组看起来像这样的对象:

[{name:'Timmy', size:'small', eyes:'brown'},{name:'Rico', size:'large', eyes:'purple'}]

所以我想要

sort_order = ['Timmy', 'Charlie', 'Rico', 'Hannah']
m.dogs_available.sort do |x,y|
  x = sort_order.index x.name
  y = sort_order.index y.name
  if x.nil?
    -1
  elsif y.nil?
    -1
  else
    x <=> y
  end
end

然后将其打印出来(仅用于测试,我稍后会将其清理干净)看起来像:

dogs = m.dogs_available
text = ""
dogs.each do |dog|
  text += "<h4>#{dog.name}</h4>"
end
text.html_safe

对于初学者来说,这种方式并不起作用。此外,我相信这不是排序/比较的最佳方式。有什么指针吗?

1 个答案:

答案 0 :(得分:2)

您现有的排序逻辑可以替换为

m.dogs_available.sort_by{|hash| sort_order.index(hash[:name]) || -1}

然而,dogs_available来自哪里?通常在rails中,您可以将数据从数据库中提取出来,然后就可以进行排序了。