我正在尝试找到一种最有效的方法,根据来自另一个数组的已定义顺序对数组进行排序,并将其显示在我的演示者中。数组的属性需要排序,我想排序,' 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
对于初学者来说,这种方式并不起作用。此外,我相信这不是排序/比较的最佳方式。有什么指针吗?
答案 0 :(得分:2)
您现有的排序逻辑可以替换为
m.dogs_available.sort_by{|hash| sort_order.index(hash[:name]) || -1}
然而,dogs_available来自哪里?通常在rails中,您可以将数据从数据库中提取出来,然后就可以进行排序了。