foot = [{val: "left"}, {val: "right"}, {val: nil}]
foot.sort_by{ |f| f[:val].to_s }
=> [{:val=>nil}, {:val=>"left"},{:val=>"right"}]
如何使用列表末尾的nil-elements对这样的数组进行排序? =>左,右,没有
答案 0 :(得分:1)
最明显的是将数组分成两部分:使用nil值,另一部分:
foot = [{val: "left"}, {val: "right"}, {val: nil}]
nil_array, str_array = foot.partition { |h| h[:val].nil? }
str_array.sort_by{ |f| f[:val].to_s }.concat(nil_array)
如果是数字,我还会建议:
foot.sort_by { |f| f[:val] ? f[:val] : Float::INFINITY }
答案 1 :(得分:1)
您可以使用sort
比较值对并在比较中处理nil
值明确。
foot = [{val: "left"}, {val: "right"}, {val: nil}]
foot.sort{ |a,b| a[:val].nil? ? 1 : ( b[:val].nil? ? -1 : a[:val] <=> b[:val]) }
=> [{:val=>"left"},{:val=>"right"},{:val=>nil}]
答案 2 :(得分:0)
更短的一个:
foot.sort_by { |a| [a[:val] ? '' : ' ', a[:val].to_s] }