ruby – 按降序排序字符串的方法(在复杂键中)
发布时间:2020-12-17 02:49:11 所属栏目:百科 来源:网络整理
导读:为了对字符串数组a进行下行排序,可以使用反向. a.sort.reverse 但是当你想在多个排序键中使用一个字符串时,就无法做到这一点.假设items是具有属性attr1(String),attr2(String),attr3(Integer)的项的数组.排序可以像: items.sort_by{|item| [item.attr1,item
为了对字符串数组a进行下行排序,可以使用反向.
a.sort.reverse 但是当你想在多个排序键中使用一个字符串时,就无法做到这一点.假设items是具有属性attr1(String),attr2(String),attr3(Integer)的项的数组.排序可以像: items.sort_by{|item| [item.attr1,item.attr2,item.attr3]} 从上升到下降可以通过将其乘以-1来独立地为Integer完成: items.sort_by{|item| [item.attr1,-item.attr3]} 但是这种方法对于String来说并不简单.可以定义这样的方法吗?当你想对attr2进行降序排序时,它应该写成: items.sort_by{|item| [item.attr1,item.attr2.some_method,item.attr3]} 解决方法
我认为你总是可以将你的字符串转换为整数数组(ord).像这样:
strings = [["Hello","world"],["Hello","kitty"],"darling"]] strings.sort_by do |s1,s2| [ s1,s2.chars.map(&:ord).map{ |n| -n } ] end PS: 正如@CarySwoveland在这里发现的是一个带有空字符串的角落案例,这可以通过这个非优雅的解决方案来解决: strings.sort_by do |s1,s2.chars. map(&:ord). tap{|chars| chars << -Float::INFINITY if chars.empty? }. map{ |n| -n } ] end @Jordan很友好地提到sort_by使用Schwartzian Transform所以你根本不需要预处理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |