rails sort_by string with empty string latest

时间:2017-11-30 12:49:59

标签: ruby-on-rails

 foot = [{val: "left"}, {val: "right"}, {val: nil}]
 foot.sort_by{ |f| f[:val].to_s } 
 => [{:val=>nil}, {:val=>"left"},{:val=>"right"}]

如何使用列表末尾的nil-elements对这样的数组进行排序? =>左,右,没有

3 个答案:

答案 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] }