【发布时间】:2018-07-09 23:39:24
【问题描述】:
我有一组调用,我想先按 schedule_date 排序,然后再按 trigger_date 排序。
calls.sort_by! { |call| [call.scheduled_date, call.triggered_date] }
因为triggered_date 有时是一个零值,我得到了错误
#<ArgumentError: comparison of Array with Array failed>
如何对它进行排序以考虑 nil 值?我用谷歌搜索了一些例子,但找不到与我所拥有的类似的东西。比如我试过
calls.sort_by! { |call| [call.scheduled_date, call.triggered_date] } rescue nil
calls.sort_by! { |call| [call.scheduled_date, call.triggered_date] || call.scheduled_date }
但它们不起作用。我已经看到 <=> 用于 sort_by 但不确定如何在有多种排序的情况下使用它。任何帮助将不胜感激。
【问题讨论】:
-
您希望如何处理
nil值?您是否希望在非nil对应对象之前或之后进行排序,例如nil应该是“1900-01-01”还是“9999-12-31” -
好问题。现在我想一想 - 如果
triggered_date为零,那么我想使用scheduled_date.end_of_day作为替代品。 -
哦。然后忽略我刚刚发布的答案并尝试
calls.sort_by! { |call| [call.scheduled_date, call.triggered_date || call.scheduled_date.end_of_day ] }或类似的东西? -
效果很好。谢谢!我想我无法弄清楚语法。 :)
-
我更新了我的答案,以防你想接受这个作为解决方案。干得好@engineersmnky 提出了正确的问题!
标签: ruby