如何将两个数组的排序合并为一个?



如何将两个模型的排序代码合并为一个? 我有两个模型,作者和书。

我得到作者和书籍数据,对其进行排序,最后我将这两个数据连接起来。

sorted_author = author.sort do |a, b|
if a.name.nil? || a.amount.nil?
-1
elsif b.name.nil? || b.amount.nil?
1
else
[a.name, a.amount] <=> [b.name, b.amount]
end
end
sorted_book = book.sort do |a, b|
if a.data.nil? || a.price.nil?
-1
elsif b.data.nil? || b.price.nil?
1
else
[a.data, a.price] <=> [b.data, b.price]
end
end
sorted_author.concat(sorted_book)

问题是日期将单独排序,我需要将两个数组排序为一个数组。

我可以做这样的事情。

author.concat(book).sort_by do |a|
if a.instance_of? Author
[a.name, a.amount]
else
[a.data, a.price]
end
end

但是,如果在这里,例如,名称,日期,价格为零,则排序将以错误结束。

要复制您拥有的功能(所有作者,已排序,在所有书籍之上,已排序(,您可以使用nil在 ruby 中falsey

author.concat(book).sort_by do |a|
if a.instance_of? Author
[1, a.name || -1, a.amount || -1]
else
[0, a.data || -1, a.price || -1]
end
end

请注意,我把作者的前导1和书籍的0放在所有书籍之前,以保存所有作者。

最新更新